Changeset 137 for XMLIO_V2/dev/dev_rv/src/XMLIO/main.f90
- Timestamp:
- 11/17/10 14:40:14 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/XMLIO/main.f90
r134 r137 1 1 ! --------------------------------------------------- ! 2 ! ------------- XMLIO SERVER MAIN TEST -------------!2 ! XMLIO SERVER MAIN TEST ! 3 3 ! --------------------------------------------------- ! 4 4 5 MODULE XTYPE6 IMPLICIT NONE7 8 ! Ne jamais modifier les valeurs internes de ce type dans le code fortran.9 TYPE XHandle10 INTEGER :: dtype11 INTEGER :: daddr12 END TYPE XHandle13 14 TYPE XDate15 INTEGER :: year, month, day, hour, minute, second16 END TYPE XDate17 18 TYPE XDuration19 REAL(kind = 8) :: year, month, day, hour, minute, second20 END TYPE XDuration21 22 ! enum XDType23 INTEGER, PARAMETER :: NOTYPE = 024 INTEGER, PARAMETER :: DTREATMENT = 1, DDATE = 2, CALENDAR = 3, ECONTEXT = 425 INTEGER, PARAMETER :: EAXIS = 5 , EDOMAIN = 6 , EFIELD = 7 , EFILE = 8 , EGRID = 926 INTEGER, PARAMETER :: GAXIS = 10, GDOMAIN = 11, GFIELD = 12, GFILE = 13, GGRID = 1427 28 ! enum XFileType29 INTEGER, PARAMETER :: NETCDF4 = 030 31 ! Autres constantes32 TYPE(XHandle) , PARAMETER :: NULLHANDLE = XHandle(0, 0)33 TYPE(XDuration), PARAMETER :: NONEDUR = XDuration(0., 0., 0., 0., 0., 0.)34 35 END MODULE XTYPE36 37 MODULE IXHANDLE38 39 INTERFACE40 41 SUBROUTINE xios_handle_create(ret, dtype, idt)42 USE XTYPE43 TYPE(XHandle), INTENT(OUT) :: ret44 INTEGER , INTENT(IN) :: dtype45 CHARACTER*(*), INTENT(IN) :: idt46 END SUBROUTINE xios_handle_create47 48 END INTERFACE49 50 END MODULE IXHANDLE51 52 MODULE IXML53 IMPLICIT NONE54 INTERFACE55 56 SUBROUTINE xios_xml_Parse_File(filename)57 CHARACTER*(*), INTENT(IN) :: filename58 END SUBROUTINE xios_xml_Parse_File59 60 SUBROUTINE xios_xml_Parse_String(xmlcontent)61 CHARACTER*(*), INTENT(IN) :: xmlcontent62 END SUBROUTINE xios_xml_Parse_String63 64 END INTERFACE65 END MODULE IXML66 67 MODULE ICONTEXT68 IMPLICIT NONE69 INTERFACE70 71 SUBROUTINE xios_context_set_current(context, withswap)72 USE XTYPE73 TYPE(XHandle), INTENT(IN) :: context74 LOGICAL, OPTIONAL, INTENT(IN) :: withswap75 END SUBROUTINE xios_context_set_current76 77 SUBROUTINE xios_context_get_current(context)78 USE XTYPE79 TYPE(XHandle), INTENT(IN) :: context80 END SUBROUTINE xios_context_get_current81 82 SUBROUTINE xios_context_get_calendar(context, calend)83 USE XTYPE84 TYPE(XHandle), INTENT(IN) :: context85 TYPE(XHandle), INTENT(OUT) :: calend86 END SUBROUTINE xios_context_get_calendar87 88 END INTERFACE89 90 END MODULE ICONTEXT91 92 MODULE ICALENDAR93 IMPLICIT NONE94 INTERFACE95 96 SUBROUTINE xios_calendar_set_timestep(calend, dur)97 USE XTYPE98 TYPE(XHandle) , INTENT(IN) :: calend99 TYPE(XDuration), INTENT(IN) :: dur100 END SUBROUTINE xios_calendar_set_timestep101 102 END INTERFACE103 104 END MODULE ICALENDAR105 106 MODULE IDATATREATMENT107 IMPLICIT NONE108 INTERFACE109 110 SUBROUTINE xios_dtreatment_new(dt, context)111 USE XTYPE112 TYPE(XHandle), INTENT(OUT) :: dt113 TYPE(XHandle), INTENT(IN) :: context114 END SUBROUTINE xios_dtreatment_new115 116 SUBROUTINE xios_dtreatment_create_files_and_headers(dt, ftype)117 USE XTYPE118 TYPE(XHandle), INTENT(IN) :: dt119 INTEGER , INTENT(IN) :: ftype120 END SUBROUTINE xios_dtreatment_create_files_and_headers121 122 END INTERFACE123 END MODULE IDATATREATMENT124 125 5 PROGRAM MAIN 126 USE XTYPE127 6 USE IXHANDLE 128 7 USE IXML 8 USE IXMLTREE 129 9 USE ICONTEXT 10 USE ICALENDAR 11 USE IEXTENDED 130 12 USE IDATATREATMENT 131 USE ICALENDAR132 13 133 I MPLICIT NONE14 INTEGER :: compt = 0 134 15 135 INTEGER :: compt 136 TYPE(XHandle) :: context1 = NULLHANDLE 137 TYPE(XHandle) :: dtreat = NULLHANDLE 138 TYPE(XHandle) :: calend = NULLHANDLE 16 TYPE(XHandle) :: nemo_style_ctxt = NULLHANDLE, & 17 orchidee_style_ctxt = NULLHANDLE, & 18 lmdz_style_ctxt = NULLHANDLE 19 20 TYPE(XHandle) :: temp_mod = NULLHANDLE, & 21 temp_mod_ = NULLHANDLE 22 23 ! Axes verticaux 24 REAL(kind = 8), DIMENSION(10) :: vaxis = (/(i, i=1, 10)/) 25 !vvaxis = (/(i, i=1, 5)/) 26 27 ! Domaines horizontaux 28 REAL(kind = 8), DIMENSION(20) :: lonrect_orch0 = (/(i, i=11, 30)/),& 29 latrect_orch0 = (/(i, i=11, 30)/) 30 31 REAL(kind = 8), DIMENSION(10,10) :: loncurv_nemo0 = 1, & 32 latcurv_nemo0 = 1 33 34 ! Les durées 139 35 TYPE(XDuration) :: timestep_1h = XDuration(0., 0., 0., 1., 0., 0.) 36 !timestep_2h = XDuration(0., 0., 0., 2., 0., 0.) 37 38 ! Les masques 39 LOGICAL(kind = 1), DIMENSION(20, 20) :: mask0 = .TRUE._1 40 41 CHARACTER(len = *), PARAMETER :: filename = & 42 "/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml" 43 44 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 140 45 141 46 ! Parsing du document xml depuis un fichier situé sur le disque. 142 CALL x ios_xml_Parse_File("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml")47 CALL xml_Parse_File(filename) 143 48 144 ! Le calendrier doit être initialisé ici s'il ne l'a pas déjà été depuis le document xml. 49 ! Création de handle sur les contextes exstants dans lequels on souhaite travailler. 50 CALL handle_create(nemo_style_ctxt, ECONTEXT, "nemo_style") 51 CALL context_set_current(nemo_style_ctxt) 145 52 146 ! Création d'un handle sur le contexte dans lequel on souhaite travailler, cà d 'context1' ici. 147 CALL xios_handle_create(context1, ECONTEXT, "context1") 148 iF ((context1%dtype == 0) .AND. (context1%daddr == 0)) THEN 149 PRINT *, "Impossible de créer un handle sur l'élément context1 !" 150 STOP 151 END IF 53 CALL handle_create(temp_mod, EDOMAIN, "domaine0") 54 CALL xml_domain_addAttribut(domain_hdl = temp_mod, & 55 lonvalue_curv = loncurv_nemo0, & 56 latvalue_curv = latcurv_nemo0, & 57 domtype = "curvilinear") 58 59 CALL handle_create(lmdz_style_ctxt, ECONTEXT, "lmdz_style") 60 CALL context_set_current(lmdz_style_ctxt) 61 62 !!!!!!!!!!!!!!!!!!!! EXEMPLE RECONSTRUCTION !!!!!!!!!!!!!!!!!!!!! 63 ! On crée un nouveau context et on lui associe un handle. 64 CALL context_create(context_hdl = orchidee_style_ctxt, & 65 context_id = "orchidee_style", & 66 calendar_type = GREGORIAN) 67 68 ! ---------> field_définition 69 CALL handle_create(temp_mod, GFIELD, "field_definition") 70 CALL xml_tree_add(parent_hdl = temp_mod, & 71 child_hdl = temp_mod_, & 72 child_type = GFIELD, & 73 child_id = "ss_fieldgroup") 74 CALL xml_group_field_addAttribut(gfield_hdl = temp_mod_, & 75 flevel = 1, & 76 fprec = 4, & 77 fenabled = .TRUE._1) 78 CALL xml_tree_add(parent_hdl = temp_mod_, & 79 child_hdl = temp_mod , & 80 child_type = EFIELD, & 81 child_id = "field0") 82 CALL xml_field_addAttribut(field_hdl = temp_mod, & 83 fname = "field0_name", & 84 fstandard_name = "field0_sname", & 85 flong_name = "field0_lname", & 86 funit = "Pa", & 87 foperation = "inst", & 88 ffreq_op = timestep_1h, & 89 fgrid_ref = "grid0") 90 ! ---------> axis_définition 91 CALL handle_create(temp_mod, GAXIS, "axis_definition") 92 CALL xml_tree_add(parent_hdl = temp_mod, & 93 child_hdl = temp_mod_, & 94 child_type = GAXIS, & 95 child_id = "ss_axisgroup") 96 CALL xml_group_axis_addAttribut(gaxis_hdl = temp_mod_, & 97 aunit = "SI") 98 CALL xml_tree_add(parent_hdl = temp_mod_, & 99 child_hdl = temp_mod , & 100 child_type = EAXIS, & 101 child_id = "axis0") 102 CALL xml_axis_addAttribut(axis_hdl = temp_mod, & 103 aname = "saxev", & 104 astandard_name = "saxev", & 105 along_name = "Simple axe vertical",& 106 avalue = vaxis) 107 108 ! ---------> domain_définition 109 CALL handle_create(temp_mod, GDOMAIN, "domain_definition") 110 CALL xml_tree_add(parent_hdl = temp_mod, & 111 child_hdl = temp_mod_, & 112 child_type = GDOMAIN, & 113 child_id = "ss_domaingroup") 114 CALL xml_group_domain_addAttribut(gdomain_hdl = temp_mod_, & 115 ni_glo = 40, & 116 nj_glo = 40) 117 CALL xml_tree_add(parent_hdl = temp_mod_, & 118 child_hdl = temp_mod , & 119 child_type = EDOMAIN, & 120 child_id = "domain0") 121 CALL xml_domain_addAttribut(domain_hdl = temp_mod, & 122 dname = "Compressee", & 123 dstandard_name = "DomOrchTest", & 124 dlong_name = "Test type orchidee", & 125 ibegin = 10, & 126 iend = 31, & 127 jbegin = 10, & 128 jend = 31, & 129 mask = mask0, & 130 data_dim = 1, & 131 data_ni = 400, & 132 data_ibegin = 1, & 133 lonvalue_rect = lonrect_orch0, & 134 latvalue_rect = latrect_orch0, & 135 domtype = "rectilinear") 136 137 ! ---------> file_définition 138 CALL handle_create(temp_mod, GFILE, "file_definition") 139 CALL xml_tree_add(parent_hdl = temp_mod, & 140 child_hdl = temp_mod_, & 141 child_type = GFILE) 142 CALL xml_group_file_addAttribut(gfile_hdl = temp_mod_, & 143 fofreq = timestep_1h, & 144 folevel = 2, & 145 fenabled = .TRUE._1) 146 CALL xml_tree_add(parent_hdl = temp_mod_, & 147 child_hdl = temp_mod , & 148 child_type = EFILE, & 149 child_id = "file0") 150 CALL xml_file_addAttribut(file_hdl = temp_mod, & 151 fname = "data/orchidee_test.nc", & 152 fdescription = "Test sur grille type orchidee") 153 CALL xml_tree_add(parent_hdl = temp_mod , & 154 child_hdl = temp_mod_, & 155 child_type = EFIELD) 156 CALL xml_field_addAttribut(field_hdl = temp_mod_, & 157 ffield_ref = "field0") 158 159 ! ---------> grid_définition 160 CALL handle_create(temp_mod, GGRID, "grid_definition") 161 CALL xml_tree_add(parent_hdl = temp_mod, & 162 child_hdl = temp_mod_, & 163 child_type = GGRID, & 164 child_id = "ss_gridgroup") 165 CALL xml_group_grid_addAttribut(ggrid_hdl = temp_mod_, & 166 gdomain_ref = "domain0", & 167 gaxis_ref = "axis0"); 168 CALL xml_tree_add(parent_hdl = temp_mod_, & 169 child_hdl = temp_mod , & 170 child_type = EGRID, & 171 child_id = "grid0") 172 CALL xml_grid_addAttribut(grid_hdl = temp_mod, & 173 gname = "GRectiCompressee", & 174 gdescription = "Grille orchidee"); 175 176 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 177 178 ! Affichage de l'arbre xml au niveau de la sortie. 179 CALL xml_tree_show("xmlio_tree_prev.log") 180 ! CALL xml_tree_show() 152 181 153 182 ! ----------- Début du traitement ----------- ! 154 155 CALL xios_context_set_current(context1, .TRUE.) 156 157 ! Création et initialisation d'une instance de traitement des données dans 'context1'. 158 CALL xios_dtreatment_new(dtreat, context1) 159 iF ((dtreat%dtype == 0) .AND. (dtreat%daddr == 0)) THEN 160 PRINT *, "Impossible d'initialiser l'instance de traitement !" 161 STOP 162 END IF 163 164 ! Création des fichiers et des entêtes dans le contexte. 165 CALL xios_dtreatment_create_files_and_headers(dtreat, NETCDF4) 166 167 ! On récupére le calendrier associé au contexte en cours de traitement. 168 CALL xios_context_get_calendar(context1, calend) 169 iF ((calend%dtype == 0) .AND. (calend%daddr == 0)) THEN 170 PRINT *, "Impossible de récupérer le calendrier !" 171 STOP 172 END IF 173 174 ! On change la durée du timestep. 175 CALL xios_calendar_set_timestep(calend, timestep_1h) 183 ! On choisit le context dans lequel on va travailler et on commence le traitement des données. 184 CALL dtreatment_start(orchidee_style_ctxt, NETCDF4) 176 185 177 186 ! Exécution de la boucle de calcul-écriture. … … 180 189 END DO 181 190 191 ! Affichage de l'arbre xml au niveau de la sortie. 192 CALL xml_tree_show("xmlio_tree_next.log") 193 182 194 END PROGRAM MAIN
Note: See TracChangeset
for help on using the changeset viewer.