<?xml version="1.0" encoding="UTF-8" ?>
<groops>
	<!--converts gridded water heights into spherical harmonics.
The script loops over all tides in 010tideList.txt
Large values greater than +-5m are restricted to +-5 m.
om1, sa, are replaced by equillibrium tides (see global/loopEquillibriumTides).-->
	<filename label="modelName">eot20</filename>
	<filename label="MODELNAME">EOT20</filename>
	<filename label="version">version20241110</filename>
	<uint label="maxDegree" comment="spherical harmonics">180</uint>
	<global>
		<double label="maxValue" comment="[m] height values are restricted to +-maxValue">5</double>
		<double label="R" comment="TOPEX ellipsoid">6378136.3</double>
		<double label="inverseFlattening" comment="TOPEX ellipsoid">298.257</double>
		<loopType label="loopTides">
			<fileAsciiTable>
				<inputfile>010tideList.txt</inputfile>
				<startLine>0</startLine>
				<variableLoopString>doodson</variableLoopString>
				<variableLoopString>name</variableLoopString>
				<variableLoopString>netcdf</variableLoopString>
			</fileAsciiTable>
		</loopType>
		<loopType label="loopCosSin">
			<manualList>
				<string>cos</string>
				<string>sin</string>
				<variableLoopString>cossin</variableLoopString>
				<variableLoopIndex>cossinIndex</variableLoopIndex>
			</manualList>
		</loopType>
		<loopType label="loopEquilibriumTides">
			<manualTable>
				<table>
					<rowWise>
						<row comment="om1">
							<cell>055.565</cell>
							<cell>om1</cell>
							<cell>-7.71964480000000e-02</cell>
						</row>
						<row disabled="1" comment="om2">
							<cell>055.575</cell>
							<cell>om2</cell>
							<cell>-7.53526500000000e-04</cell>
						</row>
						<row comment="sa">
							<cell>056.554</cell>
							<cell>sa</cell>
							<cell>-1.360322439950949897e-02</cell>
						</row>
						<row disabled="1" comment="ssa">
							<cell>057.555</cell>
							<cell>ssa</cell>
							<cell>-8.565340559856118863e-02</cell>
						</row>
					</rowWise>
				</table>
				<variableLoopString>doodsonEq</variableLoopString>
				<variableLoopString>nameEq</variableLoopString>
				<variableLoopString>tgp</variableLoopString>
			</manualTable>
		</loopType>
		<filename label="groopsDataDir">/itsg/groops/data</filename>
		<filename label="tmpDir">/dev/shm/01groopsConvert</filename>
	</global>
	<program comment="grids">
		<FileCreateDirectories>
			<directory>grids</directory>
			<directory>coeff</directory>
		</FileCreateDirectories>
	</program>
	<program comment="convert netcdf">
		<LoopPrograms>
			<loop link="loopTides"/>
			<continueAfterError>0</continueAfterError>
			<processCountPerIteration>0</processCountPerIteration>
			<parallelLog>1</parallelLog>
			<!--do not verwrite exsiting file-->
			<program comment="netcdf -&gt; griddedData">
				<IfPrograms>
					<condition>
						<and>
							<condition>
								<fileExist>
									<file comment="name in upper case">{netcdf}</file>
								</fileExist>
							</condition>
							<condition>
								<not>
									<condition>
										<fileExist>
											<file>grids/grid_{doodson}_{name}.dat.gz</file>
										</fileExist>
									</condition>
								</not>
							</condition>
						</and>
					</condition>
					<program comment="{tmpDir}/grid_{doodson}_{name}">
						<FileCreateDirectories>
							<directory>{tmpDir}/grid_{doodson}_{name}</directory>
						</FileCreateDirectories>
					</program>
					<program comment="{netcdf}">
						<NetCdfInfo>
							<inputfileNetCdf>{netcdf}</inputfileNetCdf>
						</NetCdfInfo>
					</program>
					<program comment="{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz">
						<NetCdf2GriddedData>
							<outputfileGriddedData>{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz</outputfileGriddedData>
							<inputfileNetCdf>{netcdf}</inputfileNetCdf>
							<variableNameLongitude>lon</variableNameLongitude>
							<variableNameLatitude>lat</variableNameLatitude>
							<variableNameData>amplitude</variableNameData>
							<variableNameData>phase</variableNameData>
							<R link="R"/>
							<inverseFlattening link="inverseFlattening"/>
						</NetCdf2GriddedData>
					</program>
					<!--remove north and south pole
remove duplicate values at 360 longitude-->
					<program comment="{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz">
						<GriddedDataConcatenate>
							<outputfileGriddedData>{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz</outputfileGriddedData>
							<inputfileGriddedData>{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz</inputfileGriddedData>
							<border>
								<rectangle>
									<minLambda>-180</minLambda>
									<maxLambda>180</maxLambda>
									<minPhi>-90+0.0333333/2</minPhi>
									<maxPhi>90-0.0333333/2</maxPhi>
									<exclude>0</exclude>
								</rectangle>
							</border>
							<sortPoints>1</sortPoints>
							<removeDuplicates>
								<keepFirst>
									<margin>1e-5</margin>
								</keepFirst>
							</removeDuplicates>
							<R>6378137.0</R>
							<inverseFlattening>298.2572221010</inverseFlattening>
						</GriddedDataConcatenate>
					</program>
					<program comment="grids/grid_{doodson}_{name}.dat.gz">
						<GriddedDataCalculate>
							<outputfileGriddedData>grids/grid_{doodson}_{name}.dat.gz</outputfileGriddedData>
							<inputfileGriddedData>{tmpDir}/grid_{doodson}_{name}/grid_{doodson}_{name}.dat.gz</inputfileGriddedData>
							<longitude>longitude</longitude>
							<latitude>latitude</latitude>
							<height>height</height>
							<area>(pi()/180*0.125)^2*cos(pi()/180*latitude)</area>
							<!-- if data0=inphase, data1=quadrature
============================================-->
							<value comment="convert cm -&gt; m">if(isnan(data0), 0, 0.01*data0)</value>
							<value comment="convert cm -&gt; m">if(isnan(data1), 0, 0.01*data1)</value>
							<!--Alternative: if data0=amplitude, data1=phase
============================================-->
							<value disabled="1">if(isnan(data0), 0, 0.01*data0*cos(pi()/180*data1))</value>
							<value disabled="1">if(isnan(data0), 0, 0.01*data0*sin(pi()/180*data1))</value>
							<computeArea>0</computeArea>
							<R link="R"/>
							<inverseFlattening link="inverseFlattening"/>
						</GriddedDataCalculate>
					</program>
					<program comment="{tmpDir}/grid_{doodson}_{name}">
						<FileRemove>
							<files>{tmpDir}/grid_{doodson}_{name}</files>
						</FileRemove>
					</program>
				</IfPrograms>
			</program>
			<!--do not verwrite exsiting file-->
			<conditionType label="_localCondition_">
				<and>
					<condition>
						<not>
							<condition>
								<fileExist>
									<file>coeff/coeff_{doodson}_{name}_cos.dat</file>
								</fileExist>
							</condition>
						</not>
					</condition>
					<condition>
						<fileExist>
							<file>grids/grid_{doodson}_{name}.dat.gz</file>
						</fileExist>
					</condition>
				</and>
			</conditionType>
			<program condition="_localCondition_" comment="coeff/coeff_{doodson}_{name}_cos.dat">
				<GriddedData2PotentialCoefficients>
					<outputfilePotentialCoefficients>coeff/coeff_{doodson}_{name}_cos.dat</outputfilePotentialCoefficients>
					<outputfilePotentialCoefficients>coeff/coeff_{doodson}_{name}_sin.dat</outputfilePotentialCoefficients>
					<inputfileGriddedData>grids/grid_{doodson}_{name}.dat.gz</inputfileGriddedData>
					<value>min(max(data0, -maxValue), maxValue)</value>
					<value>min(max(data1, -maxValue), maxValue)</value>
					<weight>area</weight>
					<kernel>
						<waterHeight>
							<density>1025</density>
							<inputfileLoadingLoveNumber>{groopsDataDir}/loading/loadLoveNumbers_Gegout97.txt</inputfileLoadingLoveNumber>
						</waterHeight>
					</kernel>
					<minDegree>0</minDegree>
					<maxDegree link="maxDegree"/>
					<GM>3.986004415e+14</GM>
					<R>6378136.3</R>
					<leastSquares>1</leastSquares>
				</GriddedData2PotentialCoefficients>
			</program>
		</LoopPrograms>
	</program>
	<program comment="equillibriumTide">
		<GroupPrograms>
			<silently>0</silently>
			<program comment="grids/grid_000.000_equillibriumTide.dat">
				<GriddedDataCalculate>
					<outputfileGriddedData>grids/grid_000.000_equillibriumTide.dat</outputfileGriddedData>
					<inputfileGriddedData>coeff/coeff_255.555_m2_cos.dat</inputfileGriddedData>
					<removalCriteria comment="remove points on land">(data0^2+data1^2) &lt; 1e-5</removalCriteria>
					<longitude>longitude</longitude>
					<latitude>latitude</latitude>
					<height>height</height>
					<area>area</area>
					<computeArea>0</computeArea>
					<R>6378137.0</R>
					<inverseFlattening>298.2572221010</inverseFlattening>
				</GriddedDataCalculate>
			</program>
			<program comment="coeff/coeff_000.000_equillibriumTide.dat">
				<ModelEquilibriumTide>
					<outputfilePotentialCoefficients>coeff/coeff_000.000_equillibriumTide.dat</outputfilePotentialCoefficients>
					<gridOcean>
						<file>
							<inputfileGrid>grids/grid_000.000_equillibriumTide.dat</inputfileGrid>
						</file>
					</gridOcean>
					<maxDegree link="maxDegree"/>
					<GM>3.986004415e+14</GM>
					<R>6378136.3</R>
					<density>1025</density>
					<tideGeneratingPotential>1</tideGeneratingPotential>
					<k20>0.30190</k20>
					<k20plus>-0.00089</k20plus>
					<h20_0>0.6078</h20_0>
					<h20_2>-0.0006</h20_2>
					<inputfilePotentialLoadLoveNumber>{groopsDataDir}/loading/loadLoveNumbers_Gegout97.txt</inputfilePotentialLoadLoveNumber>
					<inputfileDeformationLoadLoveNumber>{groopsDataDir}/loading/deformationLoveNumbers_CE_Gegout97.txt</inputfileDeformationLoadLoveNumber>
				</ModelEquilibriumTide>
			</program>
			<program comment="loopEquilibriumTides">
				<LoopPrograms>
					<loop link="loopEquilibriumTides"/>
					<continueAfterError>0</continueAfterError>
					<processCountPerIteration>0</processCountPerIteration>
					<parallelLog>1</parallelLog>
					<program comment="coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_cos.dat">
						<Gravityfield2PotentialCoefficients>
							<outputfilePotentialCoefficients>coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_cos.dat</outputfilePotentialCoefficients>
							<gravityfield>
								<potentialCoefficients>
									<inputfilePotentialCoefficients>coeff/coeff_000.000_equillibriumTide.dat</inputfilePotentialCoefficients>
									<minDegree>0</minDegree>
									<factor>tgp</factor>
									<setSigmasToZero>0</setSigmasToZero>
								</potentialCoefficients>
							</gravityfield>
							<minDegree>1</minDegree>
							<maxDegree link="maxDegree"/>
							<GM>3.986004415e+14</GM>
							<R>6378136.3</R>
						</Gravityfield2PotentialCoefficients>
					</program>
					<program comment="coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_sin.dat">
						<Gravityfield2PotentialCoefficients>
							<outputfilePotentialCoefficients>coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_sin.dat</outputfilePotentialCoefficients>
							<gravityfield>
								<potentialCoefficients>
									<inputfilePotentialCoefficients>coeff/coeff_000.000_equillibriumTide.dat</inputfilePotentialCoefficients>
									<minDegree>0</minDegree>
									<factor>0</factor>
									<setSigmasToZero>0</setSigmasToZero>
								</potentialCoefficients>
							</gravityfield>
							<minDegree>1</minDegree>
							<maxDegree link="maxDegree"/>
							<GM>3.986004415e+14</GM>
							<R>6378136.3</R>
						</Gravityfield2PotentialCoefficients>
					</program>
				</LoopPrograms>
			</program>
		</GroupPrograms>
	</program>
	<program comment="oceanTide_{modelName}_n{maxDegree}_{version}.dat">
		<PotentialCoefficients2DoodsonHarmonics>
			<outputfileDoodsonHarmonics>oceanTide_{modelName}_n{maxDegree}_{version}.dat</outputfileDoodsonHarmonics>
			<inputfileTideGeneratingPotential>{groopsDataDir}/tides/generatingTide_HW95.txt</inputfileTideGeneratingPotential>
			<constituent loop="loopEquilibriumTides" comment="equillibrium tides">
				<doodson>{doodsonEq}</doodson>
				<inputfileCosPotentialCoefficients>coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_cos.dat</inputfileCosPotentialCoefficients>
				<inputfileSinPotentialCoefficients>coeff/coeff_{doodsonEq}_{nameEq}_equillibriumTide_sin.dat</inputfileSinPotentialCoefficients>
			</constituent>
			<conditionType label="_localCondition_">
				<and>
					<condition loop="loopEquilibriumTides">
						<not>
							<condition>
								<stringMatchPattern>
									<string>{doodson}</string>
									<pattern>{doodsonEq}</pattern>
									<isRegularExpression>0</isRegularExpression>
									<caseSensitive>1</caseSensitive>
								</stringMatchPattern>
							</condition>
						</not>
					</condition>
				</and>
			</conditionType>
			<constituent loop="loopTides" condition="_localCondition_" comment="all other tides">
				<doodson>{doodson}</doodson>
				<inputfileCosPotentialCoefficients>coeff/coeff_{doodson}_{name}_cos.dat</inputfileCosPotentialCoefficients>
				<inputfileSinPotentialCoefficients>coeff/coeff_{doodson}_{name}_sin.dat</inputfileSinPotentialCoefficients>
			</constituent>
			<minDegree>1</minDegree>
			<GM>3.986004415e+14</GM>
			<R>6378136.3</R>
			<applyXi>1</applyXi>
		</PotentialCoefficients2DoodsonHarmonics>
	</program>
	<program comment="oceanTide_{modelName}_admittance_linear_linear.txt">
		<DoodsonHarmonicsCalculateAdmittance>
			<outputfileAdmittance>oceanTide_{modelName}_admittance_linear_linear.txt</outputfileAdmittance>
			<inputfileDoodsonHarmonics>oceanTide_{modelName}_n{maxDegree}_{version}.dat</inputfileDoodsonHarmonics>
			<inputfileTideGeneratingPotential>{groopsDataDir}/tides/generatingTide_HW95.txt</inputfileTideGeneratingPotential>
			<threshold>1e-4</threshold>
			<degreeInterpolation>1</degreeInterpolation>
			<degreeExtrapolation>1</degreeExtrapolation>
			<excludeDoodsonForInterpolation>164.554</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>164.555</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>164.556</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>164.566</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>t2</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>s2</excludeDoodsonForInterpolation>
		</DoodsonHarmonicsCalculateAdmittance>
	</program>
	<program comment="oceanTide_{modelName}_admittance_linear_linear.txt">
		<DoodsonHarmonicsCalculateAdmittance>
			<outputfileAdmittance>oceanTide_{modelName}_admittance_linear_linear.txt</outputfileAdmittance>
			<inputfileDoodsonHarmonics>oceanTide_{modelName}_n{maxDegree}_{version}.dat</inputfileDoodsonHarmonics>
			<inputfileTideGeneratingPotential>{groopsDataDir}/tides/generatingTide_HW95.txt</inputfileTideGeneratingPotential>
			<threshold>1e-4</threshold>
			<degreeInterpolation>1</degreeInterpolation>
			<degreeExtrapolation>1</degreeExtrapolation>
			<excludeDoodsonForInterpolation>164.555</excludeDoodsonForInterpolation>
			<excludeDoodsonForInterpolation>164.556</excludeDoodsonForInterpolation>
		</DoodsonHarmonicsCalculateAdmittance>
	</program>
	<program comment="oceanTide_{modelName}_n{maxDegree}_{version}.potential.iers.txt">
		<DoodsonHarmonics2IersPotential>
			<outputfile>oceanTide_{modelName}_n{maxDegree}_{version}.potential.iers.txt</outputfile>
			<inputfileDoodsonHarmoncis>oceanTide_{modelName}_n{maxDegree}_{version}.dat</inputfileDoodsonHarmoncis>
			<header>Coefficients to compute variations in normalized Stokes coefficients (unit = 10^-11)</header>
			<header>Ocean tide model: {modelName} up to ({maxDegree},{maxDegree})</header>
			<factor>1e11</factor>
			<minDegree>1</minDegree>
			<maxDegree link="maxDegree"/>
		</DoodsonHarmonics2IersPotential>
	</program>
	<program comment="oceanTide_{modelName}_n{maxDegree}_{version}.waterHeight.iers.txt">
		<DoodsonHarmonics2IersWaterHeight>
			<outputfile>oceanTide_{modelName}_n{maxDegree}_{version}.waterHeight.iers.txt</outputfile>
			<inputfileDoodsonHarmoncis>oceanTide_{modelName}_n{maxDegree}_{version}.dat</inputfileDoodsonHarmoncis>
			<inputfileTideGeneratingPotential>{groopsDataDir}/tides/generatingTide_HW95.txt</inputfileTideGeneratingPotential>
			<header>Ocean tide model: {modelName} up to ({maxDegree},{maxDegree}) in cm</header>
			<kernel>
				<waterHeight>
					<density>1025</density>
					<inputfileLoadingLoveNumber>{groopsDataDir}/loading/loadLoveNumbers_Gegout97.txt</inputfileLoadingLoveNumber>
				</waterHeight>
			</kernel>
			<factor>100</factor>
			<minDegree>1</minDegree>
			<maxDegree link="maxDegree"/>
		</DoodsonHarmonics2IersWaterHeight>
	</program>
	<program comment="{MODELNAME}_OCN">
		<FileCreateDirectories>
			<directory>{MODELNAME}_OCN</directory>
			<directory>{tmpDir}</directory>
		</FileCreateDirectories>
	</program>
	<program comment="{tmpDir}/coeff_{doodson}_{name}_{cossin}.dat">
		<DoodsonHarmonics2PotentialCoefficients>
			<outputfilePotentialCoefficients>{tmpDir}/coeff_{doodson}_{name}_{cossin}.dat</outputfilePotentialCoefficients>
			<variableLoopName>name</variableLoopName>
			<variableLoopDoodson>doodson</variableLoopDoodson>
			<variableLoopCosSin>cossin</variableLoopCosSin>
			<inputfileDoodsonHarmonics>oceanTide_{modelName}_n{maxDegree}_{version}.dat</inputfileDoodsonHarmonics>
			<inputfileTideGeneratingPotential>{groopsDataDir}/tides/generatingTide_HW95.txt</inputfileTideGeneratingPotential>
			<minDegree>0</minDegree>
			<maxDegree link="maxDegree"/>
			<GM>3.986004415e+14</GM>
			<R>6378136.3</R>
			<applyXi>0</applyXi>
		</DoodsonHarmonics2PotentialCoefficients>
	</program>
	<program comment="{MODELNAME}_OCN/{MODELNAME}_OCN_001fileList.txt">
		<DoodsonAdmittance2SupplementaryFiles>
			<outputfileMajorTideList>{MODELNAME}_OCN/{MODELNAME}_OCN_001fileList.txt</outputfileMajorTideList>
			<fileNames>{MODELNAME}_OCN_{doodson}_{name}_{cossin}.gfc</fileNames>
			<outputfileDoodsonMatrix>{MODELNAME}_OCN/{MODELNAME}_OCN_002doodson.txt</outputfileDoodsonMatrix>
			<outputfileAdmittanceMatrix>{MODELNAME}_OCN/{MODELNAME}_OCN_003admittance.txt</outputfileAdmittanceMatrix>
			<inputfileAdmittance>oceanTide_{modelName}_admittance_linear_linear.txt</inputfileAdmittance>
		</DoodsonAdmittance2SupplementaryFiles>
	</program>
	<program comment="loop">
		<LoopPrograms>
			<loop>
				<loop>
					<loop link="loopTides"/>
					<loop link="loopCosSin"/>
				</loop>
			</loop>
			<continueAfterError>1</continueAfterError>
			<processCountPerIteration>1</processCountPerIteration>
			<parallelLog>1</parallelLog>
			<program comment="{MODELNAME}_OCN/{MODELNAME}_OCN_{doodson}_{name}_{cossin}.gfc">
				<PotentialCoefficients2Icgem>
					<outputfile>{MODELNAME}_OCN/{MODELNAME}_OCN_{doodson}_{name}_{cossin}.gfc</outputfile>
					<inputfilePotentialCoefficients>{tmpDir}/coeff_{doodson}_{name}_{cossin}.dat</inputfilePotentialCoefficients>
					<comment>Ocean tide model {MODELNAME} {doodson} ({name}) {cossin} part</comment>
					<comment>======================================================</comment>
					<inputfileComment>icgemHeader.txt</inputfileComment>
					<modelname>{MODELNAME}_OCN_{doodson}_{name}_{cossin}</modelname>
					<minDegree>0</minDegree>
					<maxDegree link="maxDegree"/>
					<GM>3.986004415e+14</GM>
					<R>6378136.3</R>
				</PotentialCoefficients2Icgem>
			</program>
		</LoopPrograms>
	</program>
	<program comment="{tmpDir}">
		<FileRemove>
			<files>{tmpDir}</files>
		</FileRemove>
	</program>
</groops>
