diff --git a/src/LIB/SURCOUCHE/src/fieldtype.f90 b/src/LIB/SURCOUCHE/src/fieldtype.f90 deleted file mode 100644 index ebcacb589dba698718ba254a37eb3b0d04e123f9..0000000000000000000000000000000000000000 --- a/src/LIB/SURCOUCHE/src/fieldtype.f90 +++ /dev/null @@ -1,444 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -#ifdef MNH_NCWRIT -MODULE MODE_FIELDTYPE - USE MODD_PARAM - - IMPLICIT NONE - - PRIVATE - - - TYPE field - CHARACTER(LEN=FM_FIELD_SIZE) :: name ! Le nom de l'article LFI - INTEGER :: TYPE ! Type :entier(INT) ou reel(FLOAT2) - CHARACTER(LEN=FM_FIELD_SIZE) :: ncname ! Le nom de la variable netcdf - CHARACTER(LEN=FM_FIELD_SIZE) :: ncunit ! Unité de la variable netcdf - CHARACTER(LEN=64) :: ncdes ! Description de la variable netcdf - END TYPE field - - TYPE(field), DIMENSION(:), ALLOCATABLE :: userfield - - ! Les champs contenant %TDATE et %TIME sont traites en dur - ! dans la routine de recherche de type - TYPE(field), DIMENSION(2), PARAMETER :: datefield = (/& - field('%TDA', INT2, '', '',''), & - field('%TIM', FLOAT2, '', '','') & - /) - - TYPE(field), DIMENSION(233), SAVE :: sysfield - - PUBLIC :: get_ftype, get_ncname, get_ncunit, get_ncdes, init_sysfield - -CONTAINS -SUBROUTINE init_sysfield() -sysfield(1) = field('3D1', FLOAT2, '3D1','','') -sysfield(2) = field('3D2', FLOAT2, '3D2','','') -sysfield(3) = field('3D3', FLOAT2, '3D3','','') -sysfield(4) = field('3D4', FLOAT2, '3D4','','') -sysfield(5) = field('3D5', FLOAT2, '3D5','','') -sysfield(6) = field('ACPRC', FLOAT2 , 'ACPRC','mm -h','ACcumulated Cloud& - & Precipitation Rain Rate') -sysfield(7) = field('ACPRG', FLOAT2 , 'ACPRG','mm','ACcumulated PRecipitation& - & Graupel Rate') -sysfield(8) = field('ACPRR', FLOAT2 , 'ACPRR','mm','ACcumulated Precipitation& - & Rain Rate') -sysfield(9) = field('ACPRS', FLOAT2 , 'ACPRS','mm','ACcumulated PRecipitation& - & Snow Rate') -sysfield(10) = field('ACPRT', FLOAT2 , 'ACPRT','mm','Total ACcumulated& - & PRecipitation rate') -sysfield(11) = field('ALBNIR', FLOAT2 , 'ALBNIR','','') -sysfield(12) = field('ALBS', FLOAT2 , 'ALBS','','') -sysfield(13) = field('ALBVIS', FLOAT2 , 'ALBVIS','','') -sysfield(14) = field('AOSIM', FLOAT2, 'AOSIM','','') -sysfield(15) = field('AOSIP', FLOAT2, 'AOSIP','','') -sysfield(16) = field('AOSJM', FLOAT2, 'AOSJM','','') -sysfield(17) = field('AOSJP', FLOAT2, 'AOSJP','','') -sysfield(18) = field('AVG_ZS', FLOAT2, 'AVG_ZS','m','') -sysfield(19) = field('AZIM', FLOAT2, 'AZIM','rad','azimuth') -sysfield(20) = field('BETA', FLOAT2, 'BETA','','') -sysfield(21) = field('CIT',FLOAT2, 'CIT','m-3','cloud ice concentration') -sysfield(22) = field('CLAY', FLOAT2 , 'CLAY','','') -sysfield(23) = field('CLDFR', FLOAT2 , 'CLDFR','','Cloud fraction') -sysfield(24) = field('COUNTCONV', INT2 , 'COUNTCONV','','') -sysfield(25) = field('COVERxxx', FLOAT2 , 'COVERxxx','','') -sysfield(26) = field('CV', FLOAT2 , 'CV','','') -sysfield(27) = field('D2', FLOAT2 , 'D2','','') -sysfield(28) = field('DEB', FLOAT2, 'DEB','','') -sysfield(29) = field('DIR_ALB', FLOAT2, 'DIR_ALB','','direct albedo') -sysfield(30) = field('DIRFLASWD', FLOAT2, 'DIRFLASWD','W m-2','DIRect Downward& - &Long Waves on FLAT surface') -sysfield(31) = field('DIRSRFSWD', FLOAT2 , 'DIRSRFSWD','W m-2','DIRect& - &Downward Long Waves') -sysfield(32) = field('DRICONV', FLOAT2 , 'DRICONV','','') -sysfield(33) = field('DRCCONV', FLOAT2 , 'DRCCONV','','') -sysfield(34) = field('DRVCONV', FLOAT2 , 'DRVCONV','','') -sysfield(35) = field('DRYMASST',FLOAT2, 'DRYMASST','kg','') -sysfield(36) = field('DTHCONV', FLOAT2 , 'DTHCONV','','') -sysfield(37) = field('DTHRAD', FLOAT2 , 'DTHRAD','K s-1','radiative& - &heating/cooling rate') -sysfield(38) = field('DUMMY_GR_NBR', INT2 , 'DUMMY_GR_NBR','','') -sysfield(39) = field('DUMMY_GRxxx', FLOAT2 , 'DUMMY_GRxxx','','') -sysfield(40) = field('DXRATIO', INT2, 'DXRATIO','','') -sysfield(41) = field('DYRATIO', INT2, 'DYRATIO','','') -sysfield(42) = field('EMIS', FLOAT2 , 'EMIS','','EMISsivity') -sysfield(43) = field('EMISFILE_GR_NBR', INT2 , 'EMISFILE_GR_NBR','','') -sysfield(44) = field('EMISPEC_GR_NBR', INT2 , 'EMISPEC_GR_NBR','','') -sysfield(45) = field('EMISTIMESxxx', INT2 , 'EMISTIMESxxx','','') -sysfield(46) = field('EPSM', FLOAT2, 'EPSM','','') -sysfield(47) = field('EPST',FLOAT2, 'EPST','','') -sysfield(48) = field('EVAP3D',FLOAT2, 'EVAP3D','kg kg-1 s-1','INstantaneous 3D& - &Rain Evaporation flux') -sysfield(49) = field('EXNTOP',FLOAT2, 'EXNTOP','','exner function at model top') -sysfield(50) = field('FLALWD', FLOAT2, 'FLALWD','W m-2','Downward Long Waves on& - &FLAT surface') -sysfield(51) = field('FRC', INT2, 'FRC','','') -sysfield(52) = field('FMU', FLOAT2, 'FMU','kg m-1 s-2','') -sysfield(53) = field('FMV', FLOAT2, 'FMV','kg m-1 s-2','') -sysfield(54) = field('GAMMA', FLOAT2 , 'GAMMA','','') -sysfield(55) = field('GFLUX',FLOAT2, 'GFLUX','W m-2','') -sysfield(56) = field('GXRVFRCxx', FLOAT2 , 'GXRVFRCxx','','') -sysfield(57) = field('GXTHFRCxx', FLOAT2 , 'GXTHFRCxx','','') -sysfield(58) = field('GYRVFRCxx', FLOAT2 , 'GYRVFRCxx','','') -sysfield(59) = field('GYTHFRCxx', FLOAT2 , 'GYTHFRCxx','','') -sysfield(60) = field('H', FLOAT2, 'H','W m-2','') -sysfield(61) = field('HO2IM', FLOAT2, 'HO2IM','m','') -sysfield(62) = field('HO2IP', FLOAT2, 'HO2IP','m','') -sysfield(63) = field('HO2JM', FLOAT2, 'HO2JM','m','') -sysfield(64) = field('HO2JP', FLOAT2, 'HO2JP','m','') -sysfield(65) = field('I1D', INT2, 'I1D','','') -sysfield(66) = field('I2D_XY', INT2, 'I2D_XY','','') -sysfield(67) = field('IE', INT2, 'IE','','') -sysfield(68) = field('IMAX', INT2, 'IMAX','','') -sysfield(69) = field('INPRR3D', FLOAT2, 'INPRR3D','m s-1','INstantaneous 3D Rain& - &Precipitation flux') -sysfield(70) = field('INPRC', FLOAT2 , 'INPRC','mm h-1','INstantaneous Cloud& - &Precipitation Rain Rate') -sysfield(71) = field('INPRG', FLOAT2 , 'INPRG','mm h-1','INstantaneous& - &PRecipitation Graupel Rate') -sysfield(72) = field('INPRR', FLOAT2 , 'INPRR','mm h-1','INstantaneous& - &Precipitation Rain Rate') -sysfield(73) = field('INPRS', FLOAT2 , 'INPRS','mm h-1','INstantaneous& - &PRecipitation Snow Rate') -sysfield(74) = field('INPRT', FLOAT2 , 'INPRT','mm h-1','Total INstantaneaous& - &PRecipitation rate') -sysfield(75) = field('JMAX', INT2, 'JMAX','','') -sysfield(76) = field('KMAX', INT2, 'KMAX','','') -sysfield(77) = field('LAT', FLOAT2, 'LAT','degrees-north','') -sysfield(78) = field('LBXSVMxxx', FLOAT2 , 'LBXSVM','','') -sysfield(79) = field('LBYSVMxxx', FLOAT2 , 'LBYSVM','','') -sysfield(80) = field('LBXUM', FLOAT2, 'LBXUM','m s-1','') -sysfield(81) = field('LBYUM', FLOAT2, 'LBYUM','m s-1','') -sysfield(82) = field('LBXVM', FLOAT2,'LBXVM','m s-1' ,'') -sysfield(83) = field('LBYVM', FLOAT2, 'LBYVM','m s-1','') -sysfield(84) = field('LBXWM', FLOAT2, 'LBXWM','m s-1','') -sysfield(85) = field('LBYWM', FLOAT2, 'LBYWM','m s-1','') -sysfield(86) = field('LBXTHM', FLOAT2, 'LBXTHM','K','') -sysfield(87) = field('LBYTHM', FLOAT2, 'LBYTHM','K','') -sysfield(88) = field('LBXRVM', FLOAT2, 'LBXRVM','kg kg-1','') -sysfield(89) = field('LBYRVM', FLOAT2, 'LBYRVM','kg kg-1','') -sysfield(90) = field('LON', FLOAT2, 'LON','degrees-east','') -sysfield(91) = field('LONOR', FLOAT2, 'LONOR','','') -sysfield(92) = field('LATOR', FLOAT2, 'LATOR','','') -sysfield(93) = field('LE', FLOAT2, 'LE','W m-2','') -sysfield(94) = field('LSUM', FLOAT2, 'LSUM','m s-1','large scale x-wind& - &component') -sysfield(95) = field('LSVM', FLOAT2, 'LSVM','m s-1','large scale y-wind& - &component') -sysfield(96) = field('LSWM',FLOAT2 , 'LSWM','m s-1','large scale z-wind& - &component') -sysfield(97) = field('LSTHM',FLOAT2, 'LSTHM','K','large scale & - & potential temperature') -sysfield(98) = field('LSRVM',FLOAT2, 'LSRVM','kg kg-1','large scale vapor& - &mixing ratio') -sysfield(99) = field('LSXTKEM',FLOAT2, 'LSXTKEM','','') -sysfield(100) = field('LSYTKEM',FLOAT2, 'LSYTKEM','','') -sysfield(101) = field('LSXEPSM',FLOAT2, 'LSXEPSM','','') -sysfield(102) = field('LSXRIM', FLOAT2, 'LSXRIM','','') -sysfield(103) = field('LSYRIM', FLOAT2, 'LSYRIM','','') -sysfield(104) = field('LSXRSM', FLOAT2, 'LSXRSM','','') -sysfield(105) = field('LSYRSM', FLOAT2, 'LSYRSM','','') -sysfield(106) = field('LSYRCM', FLOAT2, 'LSYRCM','','') -sysfield(107) = field('LSXRRM', FLOAT2, 'LSXRRM','','') -sysfield(108) = field('LSYRRM', FLOAT2, 'LSYRRM','','') -sysfield(109) = field('LAI', FLOAT2 , 'LAI','','') -sysfield(110) = field('LSXRGM', FLOAT2, 'LSXRGM','','') -sysfield(111) = field('LSYRGM', FLOAT2, 'LSYRGM','','') -sysfield(112) = field('LSXRHM', FLOAT2, 'LSXRHM','','') -sysfield(113) = field('LSYRHM', FLOAT2, 'LSYRHM','','') -sysfield(114) = field('LSXSVMxxx', FLOAT2, 'LSXSVM','','') -sysfield(115) = field('LSYSVMxxx', FLOAT2, 'LSYSVM','','') -sysfield(116) = field('LSYEPSM',FLOAT2, 'LSYEPSM','','') -sysfield(117) = field('LSXRCM',FLOAT2 , 'LSXRCM','','') -sysfield(118) = field('LAT0', FLOAT2, 'LAT0','','') -sysfield(119) = field('LAND', FLOAT2 , 'LAND','','') -sysfield(120) = field('LON0', FLOAT2, 'LON0','','') -sysfield(121) = field('MASDEV', INT2 , 'MASDEV','','') -sysfield(122) = field('MAX_ZS', FLOAT2, 'MAX_ZS','m','') -sysfield(123) = field('MIN_ZS', FLOAT2, 'MIN_ZS','m','') -sysfield(124) = field('MRC', FLOAT2, 'MRC','g kg-1','') -sysfield(125) = field('MRR', FLOAT2, 'MRR','g kg-1','') -sysfield(126) = field('MRV', FLOAT2, 'MRV','g kg-1','') -sysfield(127) = field('NEB', FLOAT2 , 'NEB','','') -sysfield(128) = field('PABSM',FLOAT2, 'PABSM','Pa','Absolute pressure') -sysfield(129) = field('PABST',FLOAT2, 'PABST','','') -sysfield(130) = field('PACCONV', FLOAT2 , 'PACCONV','','') -sysfield(131) = field('PRCONV', FLOAT2 , 'PRCONV','','') -sysfield(132) = field('PATCH_NUMBER', INT2, 'PATCH_NUMBER','','') -sysfield(133) = field('RCM', FLOAT2, 'RCM','kg kg-1','cloud mixing ratio') -sysfield(134) = field('RCT',FLOAT2, 'RCT','kg kg-1','cloud mixing ratio') -sysfield(135) = field('RESA', FLOAT2 , 'RESA','','') -sysfield(136) = field('RGL', FLOAT2 , 'RGL','','') -sysfield(137) = field('RGM', FLOAT2, 'RGM','kg kg-1','graupel mixing ratio') -sysfield(138) = field('RGT',FLOAT2, 'RGT','kg kg-1','graupel mixing ratio') -sysfield(139) = field('RHM', FLOAT2, 'RHM','kg kg-1','') -sysfield(140) = field('RHT',FLOAT2, 'RHT','kg kg-1','') -sysfield(141) = field('RHOS', FLOAT2 , 'RHOS','','') -sysfield(142) = field('RIM', FLOAT2, 'RIM','kg kg-1','ice mixing ratio') -sysfield(143) = field('RIMX',INT2, 'RIMX','','') -sysfield(144) = field('RIMY',INT2, 'RIMY','','') -sysfield(145) = field('RIT',FLOAT2, 'RIT','kg kg-1','ice mixing ratio') -sysfield(146) = field('RN', FLOAT2, 'RN','w m-2','') -sysfield(147) = field('RPK', FLOAT2, 'RPK','','') -sysfield(148) = field('RRM', FLOAT2, 'RRM','kg kg-1','rain mixing ratio') -sysfield(149) = field('RRT',FLOAT2, 'RRT','kg kg-1','rain mixing ratio') -sysfield(150) = field('RSMIN', FLOAT2 , 'RSMIN','','') -sysfield(151) = field('RSM', FLOAT2, 'RSM','kg kg-1','snow mixing ratio') -sysfield(152) = field('RST',FLOAT2, 'RST','kg kg-1','snow mixing ratio') -sysfield(153) = field('RSVS', FLOAT2, 'RSVS','','') -sysfield(154) = field('RVFRCxx', FLOAT2 , 'RVFRCxx','','') -sysfield(155) = field('RVM', FLOAT2, 'RVM','kg kg-1','vapor mixing ratio') -sysfield(156) = field('RVT',FLOAT2, 'RVT','kg kg-1','vapor mixing ratio') -sysfield(157) = field('RHODREF', FLOAT2, 'RHODREF','kg m-3','Dry density for& - &reference state with orography') -sysfield(158) = field('RUS', FLOAT2, 'RUS','','') -sysfield(159) = field('RHOREFZ',FLOAT2, 'RHOREFZ','kg m-3','hodz for reference& - &state without orography') -sysfield(160) = field('SAND', FLOAT2 , 'SAND','','') -sysfield(161) = field('SCA_ALB', FLOAT2 , 'SCA_ALB','','SCAttered ALBedo') -sysfield(162) = field('SCAFLASWD', FLOAT2 , 'SCAFLASWD','W m-2','scattered& - &Downward Long Waves on FLAT surface') -sysfield(163) = field('SEA', FLOAT2 , 'SEA','','') -sysfield(164) = field('SFTHT', FLOAT2 , 'SFTHT','','') -sysfield(165) = field('SFRT', FLOAT2 , 'SFRT','','') -sysfield(166) = field('SFTHP', FLOAT2 , 'SFTHP','','') -sysfield(167) = field('SIGS',FLOAT2, 'SIGS','kg kg-2','sigma_s from turbulence& - &scheme') -sysfield(168) = field('SSO_DIR', FLOAT2 , 'SSO_DIR','deg','') -sysfield(169) = field('SSO_SLOPE', FLOAT2 , 'SSO_SLOPE','','') -sysfield(170) = field('SSO_STDEV', FLOAT2 , 'SSO_STDEV','m','') -sysfield(171) = field('SSO_ANIS', FLOAT2 , 'SSO_ANIS','m','SSO_ANISOTROPY') -sysfield(172) = field('SST', FLOAT2 , 'SST','','') -sysfield(173) = field('SFRP', FLOAT2 , 'SFRP','','') -sysfield(174) = field('SFSVT', FLOAT2 , 'SFSVT','','') -sysfield(175) = field('SFSVP', FLOAT2 , 'SFSVP','','') -sysfield(176) = field('SRFLWD', FLOAT2 , 'SRFLWD','','') -sysfield(177) = field('SRFSWD', FLOAT2 , 'SRFSWD','','') -sysfield(178) = field('SRCM',FLOAT2, 'SRCM','kg kg-2','normalized 2nd_order& - &moment s_r_c/2Sigma_s2') -sysfield(179) = field('SRCT',FLOAT2, 'SRCT','kg kg-2','normalized 2nd_order& - &moment s_r_c/2Sigma_s2') -sysfield(180) = field('SVMxxx', FLOAT2, 'SVM','','') -sysfield(181) = field('SIL_ZS', FLOAT2, 'SIL_ZS','m','') -sysfield(182) = field('SVTxxx',FLOAT2, 'SVT','','') -sysfield(183) = field('T2', FLOAT2 , 'T2','','') -sysfield(184) = field('THFRCxx', FLOAT2 , 'THFRCxx','','') -sysfield(185) = field('THM', FLOAT2, 'THM','K','potential temperature') -sysfield(186) = field('THT',FLOAT2, 'THT','','potential temperature') -sysfield(187) = field('THVREFZ',FLOAT2, 'THVREFZ','K','thetavz for reference& - & state without orography') -sysfield(188) = field('TKEM', FLOAT2, 'TKEM','m2 s-2','') -sysfield(189) = field('TKET',FLOAT2, 'TKET','m2 s-2','') -sysfield(190) = field('THVREF',FLOAT2, 'THVREF','K','') -sysfield(191) = field('T_ROOFx', FLOAT2, 'T_ROOFx','','') -sysfield(192) = field('TGx', FLOAT2, 'TGx','','') -sysfield(193) = field('T_ROADx', FLOAT2, 'T_ROADx','','') -sysfield(194) = field('TS', FLOAT2 , 'TS','','') -sysfield(195) = field('TSRAD', FLOAT2 , 'TSRAD','K','RADiative Surface& - &Temperature') -sysfield(196) = field('T_WALLx', FLOAT2, 'T_WALLx','','') -sysfield(197) = field('UFRCxx', FLOAT2 , 'UFRCxx','','') -sysfield(198) = field('UM', FLOAT2, 'UM','m s-1','x-wind component') -sysfield(199) = field('UT',FLOAT2, 'U','m s-1','x-wind component') -sysfield(200) = field('VEG', FLOAT2 , 'VEG','','') -sysfield(201) = field('VFRCxx', FLOAT2 , 'VFRCxx','','') -sysfield(202) = field('VM', FLOAT2, 'VM','m s-1','y-wind component') -sysfield(203) = field('VT',FLOAT2, 'V','m s-1','y-wind component') -sysfield(204) = field('W2', FLOAT2 , 'W2','','') -sysfield(205) = field('WFRCxx', FLOAT2 , 'WFRCxx','','') -sysfield(206) = field('WG', FLOAT2 , 'WG','','') -sysfield(207) = field('WGIx', FLOAT2, 'WGIx','','') -sysfield(208) = field('WGx', FLOAT2, 'WGx','','') -sysfield(209) = field('WM', FLOAT2, 'WM','m s-1','z-wind component') -sysfield(210) = field('WR', FLOAT2 , 'WR','','') -sysfield(211) = field('WS', FLOAT2 , 'WS','','') -sysfield(212) = field('WSUBCONV', FLOAT2 , 'WSUBCONV','','') -sysfield(213) = field('WT',FLOAT2, 'W','m s-1','z-wind component') -sysfield(214) = field('WTHVMF', FLOAT2 , 'WTHVMF','m K s-1','') -sysfield(215) = field('X1D', FLOAT2, 'X1D','','') -sysfield(216) = field('XHAT', FLOAT2, 'XHAT','m','position x in the conformal or& - &cartesian plane') -sysfield(217) = field('XOR', INT2, 'XOR','','') -sysfield(218) = field('YHAT', FLOAT2, 'YHAT','m','position y in the conformal or& - &cartesian plane') -sysfield(219) = field('YOR', INT2, 'YOR','','') -sysfield(220) = field('YTEXT', TEXT, 'YTEXT','','') -sysfield(221) = field('Z0SEA', FLOAT2 , 'Z0SEA','','') -sysfield(222) = field('Z0VEG', FLOAT2 , 'Z0VEG','','') -sysfield(223) = field('Z0HVEG', FLOAT2 , 'Z0HVEG','','') -sysfield(224) = field('Z0REL', FLOAT2 , 'Z0REL','','') -sysfield(225) = field('Z0EFFIP', FLOAT2 , 'Z0EFFIP','','') -sysfield(226) = field('Z0EFFIM', FLOAT2 , 'Z0EFFIM','','') -sysfield(227) = field('Z0EFFJP', FLOAT2 , 'Z0EFFJP','','') -sysfield(228) = field('Z0EFFJM', FLOAT2 , 'Z0EFFJM','','') -sysfield(229) = field('ZENITH', FLOAT2 , 'ZENITH','rad','ZENITH') -sysfield(230) = field('ZHAT', FLOAT2, 'ZHAT','m','height level without orography') -sysfield(231) = field('ZR', FLOAT2, 'ZR','','') -sysfield(232) = field('ZS', FLOAT2, 'ZS','m','orography') -sysfield(233) = field('ZSMT', FLOAT2, 'ZSMT','m','smooth orography') -END SUBROUTINE init_sysfield - - FUNCTION get_ftype(hfname) - CHARACTER(LEN=*) :: hfname - INTEGER :: get_ftype - - TYPE(field) :: tzf - - ! Is this a diachronic field ? - IF (INDEX(hfname,".TY",.TRUE.) /=0 .OR.& - & INDEX(hfname,".TI",.TRUE.) /=0 .OR.& - & INDEX(hfname,".UN",.TRUE.) /=0 .OR.& - & INDEX(hfname,".CO",.TRUE.)/=0) THEN - get_ftype = TEXT - ELSE IF (INDEX(hfname,".DI",.TRUE.) /= 0) THEN - get_ftype = INT2 - ELSE IF (INDEX(hfname,".PR",.TRUE.)/= 0 .OR.& - & INDEX(hfname,".TR",.TRUE.)/= 0 .OR.& - & INDEX(hfname,".DA",.TRUE.)/= 0) THEN - get_ftype = FLOAT2 - ELSE IF (searchfield(hfname,tzf)) THEN - ! search in databases - get_ftype = tzf%TYPE - ELSE - get_ftype = -1 - END IF - - END FUNCTION get_ftype - - FUNCTION get_ncname(hfname) - CHARACTER(LEN=*) :: hfname - CHARACTER(LEN=FM_FIELD_SIZE) :: get_ncname - - TYPE(field) :: tzf - IF (searchfield(hfname,tzf)) THEN - get_ncname = tzf%ncname - ELSE - get_ncname = hfname - END IF - END FUNCTION get_ncname - - FUNCTION get_ncunit(hfname) - CHARACTER(LEN=*) :: hfname - CHARACTER(LEN=FM_FIELD_SIZE) :: get_ncunit - - TYPE(field) :: tzf - IF (searchfield(hfname,tzf)) THEN - get_ncunit = tzf%ncunit - ELSE - get_ncunit = '' - END IF - END FUNCTION get_ncunit - - FUNCTION get_ncdes(hfname) - CHARACTER(LEN=*) :: hfname - CHARACTER(LEN=64) :: get_ncdes - - TYPE(field) :: tzf - IF (searchfield(hfname,tzf)) THEN - get_ncdes = tzf%ncdes - ELSE - get_ncdes = '' - END IF - END FUNCTION get_ncdes - - FUNCTION searchfield(hfname, tpf) - CHARACTER(LEN=*), INTENT(IN) :: hfname - TYPE(field), INTENT(OUT) :: tpf - LOGICAL :: searchfield - - INTEGER :: ji,iposx - LOGICAL :: found - - found = .FALSE. - - ! First is this a date field ? - DO ji=1,SIZE(datefield) - IF (INDEX(hfname,TRIM(datefield(ji)%name)) /= 0) THEN - found = .TRUE. - tpf = datefield(ji) - EXIT - END IF - END DO - - IF (.NOT. found) THEN - ! Next, search in user field tab - IF (ALLOCATED(userfield)) THEN - DO ji=1,SIZE(userfield) - IF (hfname==userfield(ji)%name) THEN - found = .TRUE. - tpf = userfield(ji) - EXIT - END IF - END DO - END IF - - IF (.NOT. found) THEN - ! then search in system field tab - DO ji=1,SIZE(sysfield) - IF (hfname==sysfield(ji)%name) THEN - found = .TRUE. - tpf = sysfield(ji) - EXIT -! ELSE -! ! BEGIN MODIF SB -! iposx = INDEX(sysfield(ji)%name,'x') -! IF (iposx /= 0) THEN -! IF (isnumeric(hfname(iposx:LEN_TRIM(sysfield(ji)%name))) .AND. & -! sysfield(ji)%name(1:iposx-1)//& -! hfname(iposx:LEN_TRIM(sysfield(ji)%name))==hfname) THEN -! found = .TRUE. -! tpf = sysfield(ji) -! EXIT -! ! END MODIF SB -! END IF -! END IF - END IF - END DO - END IF - END IF - - searchfield = found - - END FUNCTION searchfield - - FUNCTION isnumeric(hname) - CHARACTER(LEN=*) :: hname - LOGICAL :: isnumeric - - INTEGER :: ji - - isnumeric = .TRUE. - - DO ji = 1,LEN(hname) - IF (hname(ji:ji) > '9' .OR. hname(ji:ji) < '0') THEN - isnumeric = .FALSE. - EXIT - END IF - END DO - - END FUNCTION isnumeric - -END MODULE MODE_FIELDTYPE -#endif diff --git a/src/LIB/SURCOUCHE/src/modd_ncparam.f90 b/src/LIB/SURCOUCHE/src/modd_ncparam.f90 deleted file mode 100644 index e7c1825acf95b590a19dfc10e6794613635a2558..0000000000000000000000000000000000000000 --- a/src/LIB/SURCOUCHE/src/modd_ncparam.f90 +++ /dev/null @@ -1,20 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -#ifdef MNH_NCWRIT -MODULE MODD_PARAM - IMPLICIT NONE - - CHARACTER(LEN=*), PARAMETER :: VERSION_ID='OUTPUT FROM MESONH MODEL' - INTEGER, PARAMETER :: INT2 = 1 - INTEGER, PARAMETER :: FLOAT2 = 2 - INTEGER, PARAMETER :: TEXT = 3 - INTEGER, PARAMETER :: BOOL = 4 - - INTEGER, PARAMETER :: NOTFOUND = -1 - - INTEGER, PARAMETER :: FM_FIELD_SIZE = 32 - -END MODULE MODD_PARAM -#endif diff --git a/src/LIB/SURCOUCHE/src/mode_dimlist.f90 b/src/LIB/SURCOUCHE/src/mode_dimlist.f90 deleted file mode 100644 index d6f25ebb55744448e5c30bd42fcac567c1ff95fd..0000000000000000000000000000000000000000 --- a/src/LIB/SURCOUCHE/src/mode_dimlist.f90 +++ /dev/null @@ -1,252 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -#ifdef MNH_NCWRIT -MODULE mode_dimlist -! ------ BEGIN MODIF SB ----------- -USE MODD_PARAM -!USE MODD_DIM_ll, ONLY: NIMAX_ll,NJMAX_ll -USE MODD_DIM_n -! ------ END MODIF SB ----------- - IMPLICIT NONE - - TYPE dimCDF -! ------ BEGIN MODIF SB ----------- - CHARACTER(LEN=FM_FIELD_SIZE) :: name -! ------ END MODIF SB ----------- - INTEGER :: len - INTEGER :: id - LOGICAL :: create - INTEGER :: ndims ! number of dim reference (when create=.FALSE.) - TYPE(dimCDF), POINTER :: next - END TYPE dimCDF - - TYPE(dimCDF), POINTER, PRIVATE, SAVE :: dimlist - INTEGER, PRIVATE, SAVE :: nbelt = 0 - INTEGER, SAVE :: IDIMX = 0 - INTEGER, SAVE :: IDIMY = 0 - INTEGER, SAVE :: IDIMZ = 0 - INTEGER, SAVE :: IDIMT = 0 - INTEGER, SAVE :: IDIMN = 0 - INTEGER, SAVE :: IDIMP = 0 - INTEGER, SAVE :: CDIMT = 0 - INTEGER, SAVE :: NUMDIM = 0 - INTEGER, SAVE :: NDIMX = 0 - INTEGER, SAVE :: NDIMXR = 0 - INTEGER, SAVE :: NDIMY = 0 - INTEGER, SAVE :: NDIMZ = 0 - INTEGER, SAVE :: NDIMZR = 0 - INTEGER, SAVE :: NDIMD = 0 - INTEGER, SAVE :: NDIMT = 0 - INTEGER, SAVE :: NDIMN = 0 - INTEGER, SAVE :: NDIMP = 0 - INTEGER, SAVE :: NDIMDATE = 0 - INTEGER, SAVE :: NDIMWL = 0 - LOGICAL, SAVE :: CREATET = .TRUE. - LOGICAL, SAVE :: CREATEX = .TRUE. - LOGICAL, SAVE :: CREATEY = .TRUE. - LOGICAL, SAVE :: CREATEZ = .TRUE. - LOGICAL, SAVE :: CREATEXR = .TRUE. - LOGICAL, SAVE :: CREATEZR = .TRUE. - LOGICAL, SAVE :: CREATEN = .TRUE. - LOGICAL, SAVE :: CREATEDATE = .TRUE. - LOGICAL, SAVE :: CREATEWL = .TRUE. - LOGICAL, SAVE :: CREATED = .TRUE. - LOGICAL, SAVE :: WRITETIME = .TRUE. - LOGICAL, SAVE :: NC_WRITE = .FALSE. - CHARACTER(LEN=3), SAVE :: NC_FILE = '' - CHARACTER(LEN=FM_FIELD_SIZE), SAVE :: first_var = '' - CHARACTER(LEN=FM_FIELD_SIZE), SAVE :: last_var = '' - LOGICAL, SAVE :: DEF_NC = .TRUE. - INTEGER, SAVE :: KCDF_ID = 0 - INTEGER,DIMENSION(8), SAVE :: KCDF_IOID = 0 - TYPE(dimCDF), POINTER :: ptdimx, ptdimy, ptdimz, ptdimt, ptdimn, ptdimp,& - &ptdimd , ptdimxr, ptdimzr, ptdimwl - -CONTAINS - - SUBROUTINE init_dimCDF() - - NULLIFY(dimlist) - NULLIFY(ptdimx,ptdimy,ptdimz,ptdimt,ptdimn,ptdimp,ptdimd,ptdimzr,ptdimxr) - ! reservation for DIMX,DIMY,DIMZ - IF ( IDIMX == NIMAX_ll+2 ) THEN - ptdimx=>get_dimCDF(IDIMX,.TRUE.) -! print * , 'get dim X' -! ------ BEGIN MODIF SB ----------- -! change name of dimensions - ptdimx%name = 'X' - ELSEIF ( IDIMX == NIMAX_ll .AND. NIMAX_ll> 1 ) THEN - ptdimxr=>get_dimCDF(IDIMX,.TRUE.) - ptdimxr%name = 'XR' -! print * , 'get dim XR' - ELSEIF ( IDIMX == 16 ) THEN - ptdimd=>get_dimCDF(IDIMX,.TRUE.) - ptdimd%name = 'DATE' - END IF -! ------ END MODIF SB ----------- - IF (IDIMY == NJMAX_ll+2) THEN - ptdimy=>get_dimCDF(IDIMY,.TRUE.) -! ------ BEGIN MODIF SB ----------- - ptdimy%name = 'Y' -! print * , 'get dim Y' - END IF -! ------ END MODIF SB ----------- - ! PGD MesoNH files doesn't contain KMAX - IF (IDIMZ == NKMAX+2) THEN -! print * , ' IDIMZ == NKMAX+2 ' - ptdimz=>get_dimCDF(IDIMZ,.TRUE.) -! ------ BEGIN MODIF SB ----------- - ptdimz%name = 'Z' -! print * , 'get dim Z' - ELSEIF (IDIMZ == NKMAX ) THEN - !print * , ' IDIMZ == NKMAX ' - ptdimzr=>get_dimCDF(IDIMZ,.TRUE.) - ptdimzr%name = 'ZR' -! print * , 'get dim ZR' - ELSEIF (IDIMZ == 6 ) THEN - ptdimwl=>get_dimCDF(IDIMZ,.TRUE.) - ptdimwl%name = 'WL' - ELSEIF (IDIMZ == 3 .AND. IDIMX /= NKMAX ) THEN - ptdimd=>get_dimCDF(IDIMZ,.TRUE.) - ptdimd%name = 'D' - END IF -! print * , ' IDIMT = ' , IDIMT - IF (IDIMT > 1) THEN - ptdimt=>get_dimCDF(IDIMT,.TRUE.) - ptdimt%name = 'T' - END IF - IF (IDIMN > 1) THEN - ptdimt=>get_dimCDF(IDIMN,.TRUE.) - ptdimt%name = 'N' - END IF - END SUBROUTINE init_dimCDF - - FUNCTION size_dimCDF() - INTEGER :: size_dimCDF - - size_dimCDF = nbelt - - END FUNCTION size_dimCDF - - FUNCTION first_dimCDF() - TYPE(dimCDF), POINTER :: first_dimCDF - - first_dimCDF=>dimlist - - END FUNCTION first_dimCDF - - - FUNCTION get_dimCDF(len,ocreate) - INTEGER, INTENT(IN) :: len - LOGICAL, INTENT(IN), OPTIONAL :: ocreate ! when .TRUE. create a dim CELL - TYPE(dimCDF), POINTER :: get_dimCDF - - - TYPE(dimCDF), POINTER :: tmp - INTEGER :: count - CHARACTER(LEN=5) :: yndim - LOGICAL :: gforce - - IF (PRESENT(ocreate)) THEN - gforce = ocreate - ELSE - gforce = .FALSE. - ENDIF - IF (len /= 1) THEN - IF (gforce) THEN - NULLIFY(tmp) - ELSE - count = 0 - tmp=>dimlist - DO WHILE(ASSOCIATED(tmp)) - IF (tmp%len == len) EXIT - tmp=>tmp%next - count = count+1 - END DO - END IF - IF (.NOT. ASSOCIATED(tmp)) THEN - ALLOCATE(tmp) - nbelt = nbelt+1 - WRITE(yndim,'(i5)') count - tmp%name = 'DIM'//ADJUSTL(yndim) - tmp%len = len - tmp%id = 0 - IF (len == IDIMX*IDIMY .AND. IDIMY > 1 .AND. IDIMY /= CDIMT ) THEN - tmp%create = .FALSE. - tmp%ndims = 2 - !print * , ' GUSEDIM 2D ' - ELSEIF (len == IDIMX*IDIMY*IDIMZ .AND. IDIMY > 1 .AND. IDIMZ > 6 ) THEN - tmp%ndims = 3 - tmp%create = .FALSE. - !print * , ' GUSEDIM 3D ' - ELSEIF (len == IDIMX*IDIMY*IDIMZ .AND. IDIMY > 1 .AND. IDIMZ == 3 ) THEN - tmp%ndims = 4 - tmp%create = .FALSE. - !print * , ' GUSEDIM 3D DEPTH ' - ELSEIF (len == IDIMX*IDIMY*IDIMZ .AND. IDIMY > 1 .AND. IDIMZ == 6 ) THEN - tmp%ndims = 9 - tmp%create = .FALSE. - !print * , ' GUSEDIM XYWL ' - ELSEIF (IDIMZ == 6 .AND. len == IDIMX*IDIMZ ) THEN - tmp%ndims = 6 - tmp%create = .FALSE. - !print * , ' GUSEDIM XWL ' - ELSEIF (IDIMX > 1 .AND. len == IDIMX*IDIMZ .AND. & - & IDIMZ == NKMAX ) THEN - tmp%ndims = 10 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM XZR ' - ELSEIF (IDIMX > 1 .AND. len == IDIMX*IDIMZ .AND. & - & IDIMZ == NKMAX+2 ) THEN - tmp%ndims = 12 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM XZ ' - ELSEIF (IDIMX == 16 .AND. IDIMY == CDIMT ) THEN - tmp%ndims = 16 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM XT ' - ELSEIF (IDIMT > 1 .AND. len == IDIMZ*IDIMT & - & .AND. IDIMZ == NKMAX ) THEN - tmp%ndims = 14 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM ZRT ' - ELSEIF (IDIMT > 1 .AND. len == IDIMZ*IDIMT*IDIMN & - & .AND. IDIMZ == NKMAX .AND. IDIMN > 1 ) THEN - tmp%ndims = 17 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM ZRTN ' - ELSEIF (IDIMT > 1 .AND. len == IDIMX*IDIMT & - & .AND. IDIMX > 1 ) THEN - tmp%ndims = 16 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM XT ' - ELSEIF (IDIMZ == NKMAX .AND. len == IDIMX*IDIMZ & - & .AND. IDIMT == 1 ) THEN - tmp%ndims = 15 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM ZR ' - ELSEIF (IDIMZ == NKMAX+2 .AND. IDIMX == 1 ) THEN - tmp%ndims = 18 ! faux mais reconnu dans def_ncdf - tmp%create = .FALSE. - !print * , ' GUSEDIM Z ' - ELSE - tmp%ndims = 1 - tmp%create = .TRUE. - !print * , ' GUSEDIM 1D' - END IF - tmp%next => dimlist - dimlist => tmp - END IF - - get_dimCDF=>tmp - - ELSE - - NULLIFY(get_dimCDF) - END IF - - END FUNCTION get_dimCDF -END MODULE mode_dimlist -#endif diff --git a/src/LIB/SURCOUCHE/src/mode_util.f90 b/src/LIB/SURCOUCHE/src/mode_util.f90 deleted file mode 100644 index cedede681171c4aad09971cd61cfc8053ec10789..0000000000000000000000000000000000000000 --- a/src/LIB/SURCOUCHE/src/mode_util.f90 +++ /dev/null @@ -1,729 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -#ifdef MNH_NCWRIT -MODULE mode_util - USE MODE_FIELDTYPE - USE MODE_DIMLIST - USE MODD_PARAM - - IMPLICIT NONE - - TYPE workfield - CHARACTER(LEN=FM_FIELD_SIZE) :: name ! nom du champ - CHARACTER(LEN=FM_FIELD_SIZE) :: ncname ! nom du champ - CHARACTER(LEN=FM_FIELD_SIZE) :: ncunit ! unité du champ - CHARACTER(LEN=64) :: ncdes ! description du champ - CHARACTER(LEN=64) :: long_name ! description du champ - INTEGER :: TYPE ! type (entier ou reel) - CHARACTER(LEN=1), DIMENSION(:), POINTER :: comment - TYPE(dimCDF), POINTER :: dim - INTEGER :: id - INTEGER :: grid - END TYPE workfield - - INCLUDE 'netcdf.inc' - -CONTAINS - FUNCTION str_replace(hstr, hold, hnew) - CHARACTER(LEN=*) :: hstr - CHARACTER(LEN=*) :: hold, hnew - CHARACTER(LEN=LEN_TRIM(hstr)+MAX(0,LEN(hnew)-LEN(hold))) :: str_replace - - INTEGER :: pos - - pos = INDEX(hstr,hold) - IF (pos /= 0) THEN - str_replace = hstr(1:pos-1)//hnew//hstr(pos+LEN(hold):) - ELSE - str_replace = hstr - END IF - - END FUNCTION str_replace - - SUBROUTINE PARSE_PFIELD(yrecfm,kgrid,pfield,tpreclist,hcomment) - REAL, DIMENSION(:), INTENT(IN) :: pfield - TYPE(workfield), DIMENSION(:), POINTER :: tpreclist - INTEGER :: kgrid - - INTEGER :: ich - INTEGER :: fsize - CHARACTER(LEN=*) :: yrecfm - CHARACTER(LEN=*) :: hcomment - - ALLOCATE(tpreclist(1)) - fsize = IDIMX*IDIMY*IDIMZ*IDIMT*IDIMN*IDIMP - tpreclist(1)%name = yrecfm - -! ! Phase 2 : Extract comments and dimensions for valid articles. -! ! Infos are put in tpreclist. - CALL init_dimCDF() - tpreclist(1)%TYPE = get_ftype(yrecfm) - tpreclist(1)%ncname = get_ncname(yrecfm) - tpreclist(1)%ncunit = get_ncunit(yrecfm) - tpreclist(1)%ncdes = get_ncdes(yrecfm) - tpreclist(1)%grid = kgrid - tpreclist(1)%long_name = hcomment -! tpreclist(1)%long_name = tpreclist(1)%ncdes - tpreclist(1)%dim=>get_dimCDF(fsize) -! - END SUBROUTINE PARSE_PFIELD - - SUBROUTINE HANDLE_ERR(status,line) - INTEGER :: status,line - - IF (status /= NF_NOERR) THEN - PRINT *, 'line ',line,': ',NF_STRERROR(status) - STOP - END IF - END SUBROUTINE HANDLE_ERR - - SUBROUTINE DEF_NCDF(tpreclist) - USE MODD_TIME_n, ONLY: TDTCUR,TDTMOD - USE MODD_DIM_n - USE MODD_GRID - USE MODD_CONF, ONLY: LCARTESIAN - TYPE(workfield),DIMENSION(:),POINTER :: tpreclist - - INTEGER :: status - TYPE(dimCDF), POINTER :: tzdim - INTEGER(KIND=4) :: invdims - INTEGER(KIND=4), DIMENSION(10) :: ivdims - CHARACTER(LEN=20) :: ycdfvar - INTEGER (KIND=4) :: levId,timeId - INTEGER (KIND=4) :: hh,mm,ss - CHARACTER(len=50) :: date_string - CHARACTER(len=30) :: year,month,day,hour,minute,second - - ! global attributes - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'TITLE'& - & ,LEN(VERSION_ID),VERSION_ID) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_INT(kcdf_id,NF_GLOBAL,'CURRENT_DATE' & - & ,NF_INT,3,TDTCUR%TDATE) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'CURRENT_TIME' & - & ,NF_DOUBLE,1,TDTCUR%TIME) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_INT(kcdf_id,NF_GLOBAL,'SIMULATION_START_DATE' & - & ,NF_INT,3,TDTMOD%TDATE) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'SIMULATION_START_TIME' & - & ,NF_DOUBLE,1,TDTMOD%TIME) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'GRID_TYPE' & - & ,1,"C") - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - IF ( LCARTESIAN ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,9,"cartesian") - ELSE - IF ( XRPK == 0 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,8,"mercator") - ELSEIF ( XRPK == 1 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,35,"polar-stereographic from north pole") - ELSEIF ( XRPK == -1 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,35,"polar-stereographic from south pole") - ELSEIF ( XRPK > -1 .AND. XRPK < 0 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,33,"lambert conformal from south pole") - ELSEIF ( XRPK > 0 .AND. XRPK < 1 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,NF_GLOBAL,'PROJECTION'& - & ,33,"lambert conformal from north pole") - END IF - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'RPK' & - & ,NF_DOUBLE,1,XRPK) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'BETA' & - & ,NF_DOUBLE,1,XBETA) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'LAT0' & - & ,NF_DOUBLE,1,XLAT0) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'LON0' & - & ,NF_DOUBLE,1,XLON0) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'LATORI' & - & ,NF_DOUBLE,1,XLATORI) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_PUT_ATT_DOUBLE(kcdf_id,NF_GLOBAL,'LONORI' & - & ,NF_DOUBLE,1,XLONORI) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - END IF - -! define DIMENSIONS -! print * , 'Defining dimensions def_ncdf' - tzdim=>first_DimCDF() - DO WHILE(ASSOCIATED(tzdim)) - IF (tzdim%create) THEN - !print * , ' CREATE ' - IF ( IDIMX > 1 .AND. IDIMY == 1 .AND. IDIMZ == 1 .AND. IDIMT == 1 ) THEN - IF ( IDIMX == NKMAX+2 .AND. IDIMX /= NIMAX_ll+2 ) THEN - tzdim%name = 'Z' - ELSEIF ( tpreclist(1)%name == 'YHAT' ) THEN - tzdim%name = 'Y' - ELSEIF ( tpreclist(1)%name == 'ZHAT' ) THEN - tzdim%name = 'Z' - ELSEIF ( IDIMX == NIMAX_ll+2 ) THEN - tzdim%name = 'X' - ELSEIF ( NIMAX_ll == 0 ) THEN - !print * , 'CASE PGD' - tzdim%name = 'X' - ELSEIF ( IDIMX == NIMAX_ll ) THEN - tzdim%name = 'XR' - ELSEIF ( IDIMX == 16 .AND. IDIMX /= NIMAX_ll+2 ) THEN - tzdim%name = 'DATE' - END IF - END IF - IF ( tzdim%name == 'X' .AND. CREATEX ) THEN -! print * , ' create dim X' - CREATEX = .FALSE. - NUMDIM=NUMDIM+1 - NDIMX=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'Y' .AND. CREATEY ) THEN - !print * , ' create dim Y' - CREATEY = .FALSE. - NUMDIM=NUMDIM+1 - NDIMY=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'Z' .AND. CREATEZ ) THEN - !print * , ' create dim Z' - NUMDIM=NUMDIM+1 - NDIMZ=NUMDIM - CREATEZ = .FALSE. - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'XR' .AND. CREATEXR ) THEN - !print * , ' create dim XR' - CREATEXR = .FALSE. - NUMDIM=NUMDIM+1 - NDIMXR=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'ZR' .AND. CREATEZR ) THEN - !print * , ' create dim ZR' - CREATEZR = .FALSE. - NUMDIM=NUMDIM+1 - NDIMZR=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'DATE' .AND. CREATEDATE ) THEN - !print * , ' create dim DATE' - CREATEDATE = .FALSE. - NUMDIM=NUMDIM+1 - NDIMDATE=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'WL' .AND. CREATEWL ) THEN - !print * , ' create dim WAVELENGTH' - CREATEWL = .FALSE. - NUMDIM=NUMDIM+1 - NDIMWL=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tzdim%name == 'D' .AND. CREATED ) THEN - !print * , ' create dim DEPTH' - CREATED = .FALSE. - NUMDIM=NUMDIM+1 - NDIMWL=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( IDIMT > 1 .AND. CREATET ) THEN - !print * , ' create dim T' - tzdim%name = 'T' - NUMDIM=NUMDIM+1 - NDIMT=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - CREATET = .FALSE. - CDIMT = IDIMT - ELSEIF ( IDIMN > 1 .AND. CREATEN ) THEN - !print * , ' create dim N' - tzdim%name = 'N' - NUMDIM=NUMDIM+1 - NDIMN=NUMDIM - status = NF_DEF_DIM(kcdf_id,tzdim%name,tzdim%len,tzdim%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - CREATEN = .FALSE. - END IF - END IF - tzdim=>tzdim%next - END DO - -! PRINT *,'------------- NetCDF DEFINITION ---------------' - ! FIRST WRITE -> DEFINE TIME ORIGIN - IF ( WRITETIME ) THEN - - status = NF_DEF_VAR(kcdf_id,"time",NF_INT,& - 0,0,timeId) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - write(year,*) TDTMOD%TDATE%YEAR - write(month,*) TDTMOD%TDATE%MONTH - write(day,*) TDTMOD%TDATE%DAY - year = adjustl(year) - month = adjustl(month) - day = adjustl(day) - date_string='seconds since '//trim(year)//'-'//trim(month)//'-'//trim(day) - hh= TDTMOD%TIME / 3600 - mm = ( TDTMOD%TIME/1 - hh*3600 ) / 60 - ss = TDTMOD%TIME/1 - hh*3600 - mm*60 - write(hour,"(I2.2)") hh - hour = adjustl(hour) - write(minute,"(I2.2)") mm - minute = adjustl(minute) - write(second,"(I2.2)") ss - second = adjustl(second) - date_string = trim(date_string)//' ' & - & //trim(hour)//':'//trim(minute)//':'//trim(second) - status = NF_PUT_ATT_TEXT(kcdf_id,timeId,'units'& - & ,50,date_string) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - WRITETIME = .FALSE. - END IF - -! define VARIABLES and ATTRIBUTES - !print * , 'Defining variables and attributes def_ncdf' - - IF (ASSOCIATED(tpreclist(1)%dim)) THEN - IF ( tpreclist(1)%dim%create ) THEN - IF ( tpreclist(1)%name .NE. 'XHAT' .AND. & - & tpreclist(1)%name .NE. 'YHAT' .AND. & - & tpreclist(1)%name .NE. 'ZHAT' ) THEN - tpreclist(1)%dim%create= .FALSE. - tpreclist(1)%dim%ndims= 11 - END IF - IF ( NIMAX_ll /=0 .AND. NIMAX_ll == NKMAX ) THEN - print * , ' WARNING NIMAX=NKMAX ' - print * , ' NIMAX = ' , NIMAX_ll - print * , ' NKMAX = ' , NKMAX - print * , ' IT IS BETTER TO USE NKMAX NOT EQUAL TO NIMAX' - END IF - IF ( tpreclist(1)%name .EQ. 'YHAT' ) THEN - ivdims(1) = NDIMY - ELSEIF ( tpreclist(1)%name .EQ. 'ZHAT' ) THEN - ivdims(1) = NDIMZ - ELSEIF ( IDIMX == NKMAX+2 ) THEN - ivdims(1) = NDIMZ - ELSEIF ( IDIMX == CDIMT .OR. IDIMT == CDIMT ) THEN - ivdims(1) = NDIMT - ELSEIF (IDIMX == 3 .AND. IDIMY == 3 .AND. IDIMZ == 1 ) THEN - tpreclist(1)%dim%ndims = 2 - ELSEIF ( IDIMX == NIMAX_ll+2 ) THEN - ivdims(1) = NDIMX - ELSEIF ( IDIMX == 16 ) THEN - ivdims(1) = 5 - ELSE - !print * , 'CASE PGD' - ivdims(1) = NDIMX - END IF - END IF - IF (tpreclist(1)%dim%create) THEN - invdims = 1 - ivdims(1) = tpreclist(1)%dim%id - ELSE - IF ( tpreclist(1)%dim%ndims == 1 ) THEN - IF ( tpreclist(1)%name .NE. 'XHAT' .AND. & - & tpreclist(1)%name .NE. 'YHAT' .AND. & - & tpreclist(1)%name .NE. 'ZHAT') THEN - invdims = 11 - END IF - ELSE - invdims = tpreclist(1)%dim%ndims - END IF -! - SELECT CASE(invdims) -! - CASE(2) - status = NF_INQ_DIMID(kcdf_id,'X', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Y', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - CASE(3) - status = NF_INQ_DIMID(kcdf_id,'X', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Y', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Z', ivdims(3)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - - CASE(4) - status = NF_INQ_DIMID(kcdf_id,'X', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Y', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension - - CASE(5) - status = NF_INQ_DIMID(kcdf_id,'ZR',ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'X',ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension - - CASE(6) - status = NF_INQ_DIMID(kcdf_id,'X', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'WL', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension - - CASE(9) - status = NF_INQ_DIMID(kcdf_id,'X', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Y', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'WL', ivdims(3)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 3 ! on retablit la bonne valeur du nbre de dimension - - CASE(10) - status = NF_INQ_DIMID(kcdf_id,'X',ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'ZR',ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension -! - CASE(11) - invdims=1 ! on retablit la bonne valeur du nbre de dimension -! - CASE(12) - status = NF_INQ_DIMID(kcdf_id,'X',ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'Z',ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension -! - CASE(14) - status = NF_INQ_DIMID(kcdf_id,'ZR', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'T', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension - - CASE(15) - status = NF_INQ_DIMID(kcdf_id,'ZR', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 1 ! on retablit la bonne valeur du nbre de dimension -! - CASE(16) - status = NF_INQ_DIMID(kcdf_id,'X',ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'T', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 2 ! on retablit la bonne valeur du nbre de dimension - - CASE(17) - status = NF_INQ_DIMID(kcdf_id,'ZR',ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'T', ivdims(2)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_INQ_DIMID(kcdf_id,'N', ivdims(3)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 3 ! on retablit la bonne valeur du nbre de dimension - - CASE(18) - status = NF_INQ_DIMID(kcdf_id,'Z', ivdims(1)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - invdims = 1 ! on retablit la bonne valeur du nbre de dimension -! - CASE default - PRINT *,'Fatal error in NetCDF dimension definition ?' - STOP - END SELECT - END IF - ELSE - ! scalar variables - invdims = 0 - ivdims(1) = 0 ! ignore dans ce cas - END IF - -! Variables definition - -!! NetCDF n'aime pas les '%' dans le nom des variables -!! "%" remplaces par '_' -!! ni les '.' remplaces par '_' - ycdfvar = TRIM(tpreclist(1)%name) - ycdfvar = str_replace(ycdfvar,'%','_') - ycdfvar = str_replace(ycdfvar,'.','_') - - SELECT CASE(tpreclist(1)%TYPE) -! - CASE (TEXT) - status = NF_DEF_VAR(kcdf_id,ycdfvar,NF_CHAR,& - invdims,ivdims,tpreclist(1)%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - CASE (INT2,BOOL) - !PRINT *,'INT,BOOL : ',tpreclist(1)%name - status = NF_DEF_VAR(kcdf_id,ycdfvar,NF_INT,& - invdims,ivdims,tpreclist(1)%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - CASE (FLOAT2) - !PRINT *,'FLOAT : ',tpreclist(1)%name - IF ( tpreclist(1)%name == 'XHAT' ) THEN - ivdims(1) = NDIMX - END IF - IF ( tpreclist(1)%name == 'YHAT' ) THEN - ivdims(1) = NDIMY - END IF - IF ( tpreclist(1)%name == 'ZHAT' ) THEN - ivdims(1) = NDIMZ - END IF - status = NF_DEF_VAR(kcdf_id,ycdfvar,NF_FLOAT,& - invdims,ivdims,tpreclist(1)%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - CASE default -! PRINT *,'ATTENTION : ',TRIM(tpreclist(1)%name),' est de& -! & TYPE inconnu --> force a REAL' - status = NF_DEF_VAR(kcdf_id,ycdfvar,NF_FLOAT,& - invdims,ivdims,tpreclist(1)%id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - END SELECT - - ! attribute definition - !print * , ' attribute definition ' - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'standard_name',& - LEN(TRIM(tpreclist(1)%ncname)),TRIM(tpreclist(1)%ncname)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - IF (LEN(TRIM(tpreclist(1)%ncunit)) > 0 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'units',& - LEN(TRIM(tpreclist(1)%ncunit)),TRIM(tpreclist(1)%ncunit)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - END IF -! - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'long_name',& - LEN(TRIM(tpreclist(1)%long_name)),TRIM(tpreclist(1)%long_name)) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) -! - IF ( tpreclist(1)%grid == 2 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'stagger',& - 1,"X") - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tpreclist(1)%grid == 3 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'stagger',& - 1,"Y") - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - ELSEIF ( tpreclist(1)%grid == 4 ) THEN - status = NF_PUT_ATT_TEXT(kcdf_id,tpreclist(1)%id,'stagger',& - 1,"Z") - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - END IF -!! - - END SUBROUTINE def_ncdf - - SUBROUTINE FILL_NCDF(varID,tpreclist,pfield) - USE MODD_TIME_n, ONLY: TDTCUR,TDTMOD - USE MODD_GRID - USE MODD_GRID_n - USE MODD_CONF, ONLY: LCARTESIAN - TYPE(workfield), DIMENSION(:), INTENT(IN):: tpreclist - REAL,DIMENSION(IDIMX*IDIMY*IDIMZ*IDIMT*IDIMN*IDIMP),TARGET,INTENT(IN) ::PFIELD - REAL(KIND=4),DIMENSION(IDIMX*IDIMY*IDIMZ*IDIMT*IDIMN*IDIMP) ::WFIELD - REAL(KIND=4) ::tfield - INTEGER :: i - INTEGER :: status - INTEGER :: ileng - INTEGER :: ipos - INTEGER :: extent - INTEGER :: ich,iiu,iju - INTEGER (KIND=4) :: levId,timeId - INTEGER (KIND=4) :: varID - INTEGER (KIND=4) :: yy,mm,dd,ss,yy_cur,mm_cur - REAL :: D,D_cur ! day of month (+ fraction) - REAL :: JD,JD_cur ! Julian day - INTEGER :: A, B, A_cur, B_cur ! intermediate variables - - - ! - - IF (ASSOCIATED(tpreclist(1)%dim)) THEN - extent = tpreclist(1)%dim%len - ELSE - extent = 1 - END IF - - ! FIRST WRITE TIME - IF ( WRITETIME ) THEN - yy = TDTMOD%TDATE%YEAR - mm = TDTMOD%TDATE%MONTH - D = TDTMOD%TDATE%DAY - yy_cur = TDTCUR%TDATE%YEAR - mm_cur = TDTCUR%TDATE%MONTH - D_cur = TDTCUR%TDATE%DAY -!!!! Calcul of Julian day - IF (mm .LE. 2) THEN - yy = yy - 1 - mm = mm + 12 - END IF - IF (mm_cur .LE. 2) THEN - yy_cur = yy_cur - 1 - mm_cur = mm_cur + 12 - END IF - A = yy/100 - B = 2 - A + A/4 - JD = INT(365.25D0*(yy+4716)) + INT(30.6001D0*(mm+1)) + D + B - 1524.5D0 - A_cur = yy_cur/100 - B_cur = 2 - A_cur + A_cur/4 - JD_cur = INT(365.25D0*(yy_cur+4716)) + INT(30.6001D0*(mm_cur+1)) + D_cur + B_cur - 1524.5D0 - ss = TDTCUR%TIME-TDTMOD%TIME - ss = ss + (JD_cur - JD ) * (24*3600) - tfield=ss - status = NF_PUT_VAR_REAL(kcdf_id,1,tfield) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - WRITETIME = .FALSE. - !!!!!!!!! Write also vertical level - ! status = NF_PUT_VAR_REAL(kcdf_id,2,XZZ) - ! IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - END IF - - - SELECT CASE(tpreclist(1)%TYPE) - CASE (INT2,BOOL) - status = NF_PUT_VAR_INT(kcdf_id,varID,pfield) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - - CASE (FLOAT2) - wfield=pfield - status = NF_PUT_VAR_REAL(kcdf_id,varID,wfield) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - - CASE (TEXT) - status = NF_PUT_VAR_TEXT(kcdf_id,varID,pfield) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - - CASE default - wfield=pfield - status = NF_PUT_VAR_REAL(kcdf_id,varID,wfield) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - END SELECT - - !!!! Add vertical levels ?? - - END SUBROUTINE fill_ncdf - - SUBROUTINE NC_WRIT_ll(hvnam,hfnam,hgrid,tdim,pfield,oreal,tpreclist,hlen,hcomment) - - CHARACTER(LEN=*) :: hvnam - CHARACTER(LEN=*), INTENT(IN) :: hfnam - INTEGER, DIMENSION(6), INTENT(IN) :: tdim - REAL, DIMENSION(tdim(1)*tdim(2)*tdim(3)*tdim(4)*tdim(5)*tdim(6)), INTENT(IN) :: pfield - TYPE(workfield), DIMENSION(:),POINTER :: tpreclist - INTEGER , INTENT(IN) :: hgrid,hlen - LOGICAL, INTENT(IN) :: OREAL ! TRUE IF TRANSMITTED KFIELD IS - CHARACTER(LEN=hlen), INTENT(IN) :: hcomment - INTEGER :: status - INTEGER (KIND=4) :: varID - CHARACTER(LEN=42) :: filename, basename - INTEGER :: omode - LOGICAL :: FEXIST - CHARACTER(LEN=4) :: ypextsrc, ypextdest - INTEGER :: iverb - INTEGER :: pos - - - IDIMX = tdim(1) - IDIMY = tdim(2) - IDIMZ = tdim(3) - IDIMT = tdim(4) - IDIMN = tdim(5) - IDIMP = tdim(6) - - ! OPEN FILE IF NOT OPEN YET - filename = trim(hfnam) - ypextdest = '.nc' - IF ( LEN(NC_FILE) .eq. 0 ) THEN - filename = trim(hfnam)//ypextdest - ELSE - filename = trim(hfnam)//TRIM(NC_FILE)//ypextdest - END IF - pos = INDEX(hvnam,'%') - IF ( pos /= 0 ) THEN - hvnam = trim(hvnam) - hvnam = str_replace(hvnam,'%','_') - END IF - pos = INDEX(hvnam,'.') - IF ( pos /= 0 ) THEN - hvnam = trim(hvnam) - hvnam = str_replace(hvnam,'.','_') - END IF - - IF ( DEF_NC .AND. NC_WRITE ) THEN - - INQUIRE(FILE=TRIM(filename), EXIST=FEXIST) -! print * , ' FEXIST = ' , FEXIST - - IF ( .not.FEXIST ) then - PRINT *,'--> Fichier converti : ',TRIM(filename) - iverb = 0 - CALL init_sysfield() - -! -> NetCDF - - status = NF_CREATE(TRIM(filename), & - & IOR(NF_CLOBBER,NF_64BIT_OFFSET),kcdf_id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - status = NF_SET_FILL(kcdf_id,NF_NOFILL,omode) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - -!!! Status for dim creation - CREATET = .TRUE. - CREATEX = .TRUE. - CREATEY = .TRUE. - CREATEZ = .TRUE. - CREATEXR = .TRUE. - CREATEZR = .TRUE. - CREATEN = .TRUE. - CREATEDATE = .TRUE. - CREATEWL = .TRUE. - CREATED = .TRUE. - WRITETIME = .TRUE. - NUMDIM = 0 - first_var=hvnam - - END IF -! END IF - -! IF ( DEF_NC .AND. NC_WRITE ) THEN - status=NF_INQ_VARID(kcdf_id,hvnam,varId) -! Check to see if variable already exist -! because some variables a written twice ..!!?? - IF ( status /= 0 ) THEN - CALL PARSE_PFIELD(hvnam,hgrid,pfield,tpreclist,hcomment) - CALL DEF_NCDF(tpreclist) - last_var=hvnam - END IF - ELSE - IF (hvnam.eq.first_var) then - status = NF_ENDDEF(kcdf_id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - WRITETIME=.TRUE. - END IF - CALL PARSE_PFIELD(hvnam,hgrid,pfield,tpreclist,hcomment) - status=NF_INQ_VARID(kcdf_id,hvnam,varId) - CALL FILL_NCDF(varID,tpreclist,pfield) -! CLOSE NETCDF FILE - IF (hvnam.eq.last_var) then - status = NF_CLOSE(kcdf_id) - IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__) - NC_WRITE = .FALSE. - END IF - END IF - - END SUBROUTINE NC_WRIT_ll - -END MODULE mode_util -#endif diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index fa901638e38b00ad02fc1383176f195051447618..1c0b42a312e96be3d7e7a33a828d635dad301fb5 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -233,13 +233,6 @@ ALLOCATE(ZWORK31(IIU,IJU,IKU)) ALLOCATE(ZTEMP(IIU,IJU,IKU)) ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD) ! -! #ifdef MNH_NCWRIT -! IF (LNETCDF.AND..NOT.LCARTESIAN) THEN -! CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT) -! CALL IO_WRITE_FIELD(TPFILE,'LON',XLON) -! END IF -! #endif -! !------------------------------------------------------------------------------- ! !* 1. DIAGNOSTIC RELATED TO CONVECTION diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90 index cb713df7b3eb7e33583cd9b61165dbe37dc98c13..528b58ed0d22e15f2cdb2ce885701ac41b29eb65 100644 --- a/src/MNH/write_lfifmn_fordiachron.f90 +++ b/src/MNH/write_lfifmn_fordiachron.f90 @@ -164,15 +164,6 @@ IF (.NOT.LCARTESIAN) THEN ! CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR) CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR) -! -! #ifdef MNH_NCWRIT -! IF (LNETCDF) THEN -! LLFIFM = .FALSE. -! CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT) -! CALL IO_WRITE_FIELD(TPFILE,'LON',XLON) -! LLFIFM = .TRUE. -! END IF -! #endif END IF ! CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL) diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 1735119f8532ee69b9310f6c77c0e726222af254..ee365cd0db1ed4bd9edc58846db5d382ba568cb3 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -386,13 +386,6 @@ CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT) CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT) CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP) ! -! #ifdef MNH_NCWRIT -! ! -! !*SB*MAY2012 -! !*SB* * WRITE ALT -! IF (LNETCDF) CALL IO_WRITE_FIELD(TPFILE,'ALT',XZZ) -! #endif -! IF (.NOT.LCARTESIAN) THEN CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT) CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)