[131] | 1 | ! --------------------------------------------------- ! |
---|
| 2 | ! ------------- XMLIO SERVER MAIN TEST ------------- ! |
---|
| 3 | ! --------------------------------------------------- ! |
---|
| 4 | |
---|
[132] | 5 | MODULE XTYPE |
---|
| 6 | IMPLICIT NONE |
---|
| 7 | |
---|
| 8 | ! Ne jamais modifier les valeurs internes de ce type dans le code fortran. |
---|
| 9 | TYPE XHandle |
---|
| 10 | INTEGER :: dtype |
---|
| 11 | INTEGER :: daddr |
---|
| 12 | END TYPE XHandle |
---|
| 13 | |
---|
| 14 | TYPE XDate |
---|
| 15 | INTEGER :: year, month, day, hour, minute, second |
---|
| 16 | END TYPE XDate |
---|
| 17 | |
---|
| 18 | TYPE XDuration |
---|
[134] | 19 | REAL(kind = 8) :: year, month, day, hour, minute, second |
---|
[132] | 20 | END TYPE XDuration |
---|
| 21 | |
---|
| 22 | ! enum XDType |
---|
| 23 | INTEGER, PARAMETER :: NOTYPE = 0 |
---|
| 24 | INTEGER, PARAMETER :: DTREATMENT = 1, DDATE = 2, CALENDAR = 3, ECONTEXT = 4 |
---|
| 25 | INTEGER, PARAMETER :: EAXIS = 5 , EDOMAIN = 6 , EFIELD = 7 , EFILE = 8 , EGRID = 9 |
---|
| 26 | INTEGER, PARAMETER :: GAXIS = 10, GDOMAIN = 11, GFIELD = 12, GFILE = 13, GGRID = 14 |
---|
| 27 | |
---|
| 28 | ! enum XFileType |
---|
| 29 | INTEGER, PARAMETER :: NETCDF4 = 0 |
---|
| 30 | |
---|
| 31 | ! Autres constantes |
---|
| 32 | TYPE(XHandle) , PARAMETER :: NULLHANDLE = XHandle(0, 0) |
---|
| 33 | TYPE(XDuration), PARAMETER :: NONEDUR = XDuration(0., 0., 0., 0., 0., 0.) |
---|
| 34 | |
---|
| 35 | END MODULE XTYPE |
---|
| 36 | |
---|
| 37 | MODULE IXHANDLE |
---|
| 38 | |
---|
[131] | 39 | INTERFACE |
---|
| 40 | |
---|
[132] | 41 | SUBROUTINE xios_handle_create(ret, dtype, idt) |
---|
| 42 | USE XTYPE |
---|
| 43 | TYPE(XHandle), INTENT(OUT) :: ret |
---|
| 44 | INTEGER , INTENT(IN) :: dtype |
---|
| 45 | CHARACTER*(*), INTENT(IN) :: idt |
---|
| 46 | END SUBROUTINE xios_handle_create |
---|
| 47 | |
---|
| 48 | END INTERFACE |
---|
| 49 | |
---|
| 50 | END MODULE IXHANDLE |
---|
| 51 | |
---|
| 52 | MODULE IXML |
---|
| 53 | IMPLICIT NONE |
---|
| 54 | INTERFACE |
---|
| 55 | |
---|
[131] | 56 | SUBROUTINE xios_xml_Parse_File(filename) |
---|
| 57 | CHARACTER*(*), INTENT(IN) :: filename |
---|
| 58 | END SUBROUTINE xios_xml_Parse_File |
---|
| 59 | |
---|
| 60 | SUBROUTINE xios_xml_Parse_String(xmlcontent) |
---|
| 61 | CHARACTER*(*), INTENT(IN) :: xmlcontent |
---|
| 62 | END SUBROUTINE xios_xml_Parse_String |
---|
| 63 | |
---|
| 64 | END INTERFACE |
---|
[132] | 65 | END MODULE IXML |
---|
[131] | 66 | |
---|
[133] | 67 | MODULE ICONTEXT |
---|
| 68 | IMPLICIT NONE |
---|
| 69 | INTERFACE |
---|
| 70 | |
---|
| 71 | SUBROUTINE xios_context_set_current(context, withswap) |
---|
| 72 | USE XTYPE |
---|
[134] | 73 | TYPE(XHandle), INTENT(IN) :: context |
---|
| 74 | LOGICAL, OPTIONAL, INTENT(IN) :: withswap |
---|
[133] | 75 | END SUBROUTINE xios_context_set_current |
---|
| 76 | |
---|
[134] | 77 | SUBROUTINE xios_context_get_current(context) |
---|
| 78 | USE XTYPE |
---|
| 79 | TYPE(XHandle), INTENT(IN) :: context |
---|
| 80 | END SUBROUTINE xios_context_get_current |
---|
| 81 | |
---|
| 82 | SUBROUTINE xios_context_get_calendar(context, calend) |
---|
| 83 | USE XTYPE |
---|
| 84 | TYPE(XHandle), INTENT(IN) :: context |
---|
| 85 | TYPE(XHandle), INTENT(OUT) :: calend |
---|
| 86 | END SUBROUTINE xios_context_get_calendar |
---|
| 87 | |
---|
[133] | 88 | END INTERFACE |
---|
| 89 | |
---|
| 90 | END MODULE ICONTEXT |
---|
| 91 | |
---|
[134] | 92 | MODULE ICALENDAR |
---|
| 93 | IMPLICIT NONE |
---|
| 94 | INTERFACE |
---|
| 95 | |
---|
| 96 | SUBROUTINE xios_calendar_set_timestep(calend, dur) |
---|
| 97 | USE XTYPE |
---|
| 98 | TYPE(XHandle) , INTENT(IN) :: calend |
---|
| 99 | TYPE(XDuration), INTENT(IN) :: dur |
---|
| 100 | END SUBROUTINE xios_calendar_set_timestep |
---|
| 101 | |
---|
| 102 | END INTERFACE |
---|
| 103 | |
---|
| 104 | END MODULE ICALENDAR |
---|
| 105 | |
---|
[132] | 106 | MODULE IDATATREATMENT |
---|
| 107 | IMPLICIT NONE |
---|
| 108 | INTERFACE |
---|
| 109 | |
---|
| 110 | SUBROUTINE xios_dtreatment_new(dt, context) |
---|
| 111 | USE XTYPE |
---|
| 112 | TYPE(XHandle), INTENT(OUT) :: dt |
---|
| 113 | TYPE(XHandle), INTENT(IN) :: context |
---|
| 114 | END SUBROUTINE xios_dtreatment_new |
---|
| 115 | |
---|
| 116 | SUBROUTINE xios_dtreatment_create_files_and_headers(dt, ftype) |
---|
| 117 | USE XTYPE |
---|
| 118 | TYPE(XHandle), INTENT(IN) :: dt |
---|
| 119 | INTEGER , INTENT(IN) :: ftype |
---|
| 120 | END SUBROUTINE xios_dtreatment_create_files_and_headers |
---|
| 121 | |
---|
| 122 | END INTERFACE |
---|
| 123 | END MODULE IDATATREATMENT |
---|
| 124 | |
---|
[131] | 125 | PROGRAM MAIN |
---|
[132] | 126 | USE XTYPE |
---|
| 127 | USE IXHANDLE |
---|
| 128 | USE IXML |
---|
[133] | 129 | USE ICONTEXT |
---|
[132] | 130 | USE IDATATREATMENT |
---|
[134] | 131 | USE ICALENDAR |
---|
[132] | 132 | |
---|
[127] | 133 | IMPLICIT NONE |
---|
[79] | 134 | |
---|
[134] | 135 | INTEGER :: compt |
---|
| 136 | TYPE(XHandle) :: context1 = NULLHANDLE |
---|
| 137 | TYPE(XHandle) :: dtreat = NULLHANDLE |
---|
| 138 | TYPE(XHandle) :: calend = NULLHANDLE |
---|
| 139 | TYPE(XDuration) :: timestep_1h = XDuration(0., 0., 0., 1., 0., 0.) |
---|
[107] | 140 | |
---|
[132] | 141 | ! Parsing du document xml depuis un fichier situé sur le disque. |
---|
| 142 | CALL xios_xml_Parse_File("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml") |
---|
[131] | 143 | |
---|
[134] | 144 | ! Le calendrier doit être initialisé ici s'il ne l'a pas déjà été depuis le document xml. |
---|
| 145 | |
---|
[132] | 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 |
---|
[131] | 152 | |
---|
[132] | 153 | ! ----------- Début du traitement ----------- ! |
---|
| 154 | |
---|
[133] | 155 | CALL xios_context_set_current(context1, .TRUE.) |
---|
| 156 | |
---|
[132] | 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 | |
---|
[134] | 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) |
---|
| 176 | |
---|
| 177 | ! Exécution de la boucle de calcul-écriture. |
---|
| 178 | DO compt = 0, 9 |
---|
| 179 | |
---|
| 180 | END DO |
---|
| 181 | |
---|
[131] | 182 | END PROGRAM MAIN |
---|