next up previous contents
Next: Adding a New Fitter Up: Processors: Definitions and Rules Previous: Data Structure Manager (DSM)   Contents

Adding a New Processor

  1. Provide the following four routines. For a processor called xxx (e.g. FLT) with a longer more descriptive name yyy (e.g. FILTER), the recommended, but not compulsory, names are:-

    
    Initialisation   SUBROUTINE xxx_yyy_INI( IRETC )
    
    Processing SUBROUTINE xxx_yyy( IPRO_MODE, IRETC )
    Delete Outputs SUBROUTINE xxx_yyy_DEL( IRETC )
    Termination SUBROUTINE xxx_yyy_TRM( IRETC )

    The xxx_yyy_INI and xxx_yyy_TRM routines are optional. Subordinate routines should all start xxx_.

    For Asynchronous Processors, xxx_yyy_DEL must restore the data structure to its state before xxx_yyy was called (although a sequence of appends are reversed by a single xxx_yyy_DEL). xxx_yyy and xxx_yyy_DEL must be separate routines i.e. one cannot be an entry point in the other.

    The xxx_yyy routine has to handle all supported types of processing mode (the IPRO_MODE parameter will be one of KSU_INSERT, KSU_REPLACE or KSU_APPEND as defined in su_mnemonics.inc). If the processor only supports one mode then this parameter may used to communicate other information to it.

    The following code fragments, which assumes an asynchronous processor that does not support append, illustrates the way processing is reported to the DSM.

     
    .
    .
     
          INCLUDE 'su_mnemonics.inc'
          INCLUDE 'zunit.inc'
     
    *     Argument Declarations:-
    *     =====================
     
          integer           iretc, ipro_mode
     
    .
    .
     
          logical           inputs_exist
     
    .
    .
     
    **    The processor does not support APPEND mode.
     
          if (ipro_mode .eq. ksu_append) then
            write(iqlog,*)  'xxx_yyy does not support APPEND mode'
            iretc = 1
            return
          endif
     
    **    Prepare data structure, rolling back downstream processing
    **    if required.
     
          call dsm_pro_prepare( ksu_xxx, ipro_mode, iretc )
     
    *     If Data Structure Manager signals quit then no further
    *     action.
          if (iretc .ne. KSU_OK) return
     
          inputs_exist = .false.
     
    .
    .
     
          Now search the data structure for inputs.  If any found
          then process them and set inputs_exist = .true.
     
    .
    .
     
    **    If any inputs exist signal processor complete to the Data
    **    Structure Manager.
     
          if (inputs_exist) then
            call dsm_pro_complete( ksu_xxx, iretc )
     
    **    Otherwise, warn of missing inputs.
     
          else
            write(iqprnt,*) 'xxx_yyy has nothing to process'
            write(iqlog,*)  'xxx_yyy has nothing to process'
     
          endif
     
          return
    

  2. Update the dispatch routine su_call.inc so that it calls the processing and deleting routines e.g.:-

     
     
    *     xxx ...
     
          elseif (isu_id .eq. KSU_XXX) then
            if     (ioper .eq. KSU_INITIALISE) then
              call xxx_yyy_ini(iretc)
            elseif (ioper .eq. KSU_PROCESS)  then
              call xxx_yyy(mode,iretc)
            elseif (ioper .eq. KSU_DELETE)  then
              call xxx_yyy_del(iretc)
            elseif (ioper .eq. KSU_TERMINATE)  then
              call xxx_yyy_trm(iretc)
            endif
    

  3. Add it to the JOBP titles bank so that other users are aware of it.


next up previous contents
Next: Adding a New Fitter Up: Processors: Definitions and Rules Previous: Data Structure Manager (DSM)   Contents
sno Guest Acct 2009-09-09