# Include Directory {{{
include_directories(AFTER $ENV{ISSM_DIR}/src/c \
                          $ENV{ISSM_DIR}/src/c/main \
                          $ENV{ISSM_DIR}/src/c/datastructure \
                          $ENV{ISSM_DIR}/src/c/classes \
                          $ENV{ISSM_DIR}/src/c/classes/Options \
                          $ENV{ISSM_DIR}/src/c/classes/ElementResults \
                          $ENV{ISSM_DIR}/src/c/classes/ExternalResults \
                          $ENV{ISSM_DIR}/src/c/classes/Elements \
                          $ENV{ISSM_DIR}/src/c/classes/Inputs \
                          $ENV{ISSM_DIR}/src/c/classes/Materials \
                          $ENV{ISSM_DIR}/src/c/classes/Constraints \
                          $ENV{ISSM_DIR}/src/c/classes/Loads \
                          $ENV{ISSM_DIR}/src/c/classes/matrix \
                          $ENV{ISSM_DIR}/src/c/classes/Params \
                          $ENV{ISSM_DIR}/src/c/classes/Params \
                          $ENV{ISSM_DIR}/src/c/shared \
                          $ENV{ISSM_DIR}/src/c/shared/MemOps \
                          $ENV{ISSM_DIR}/src/c/shared/Matrix \
                          $ENV{ISSM_DIR}/src/c/shared/io \
                          $ENV{ISSM_DIR}/src/c/shared/io/Disk \
                          $ENV{ISSM_DIR}/src/c/shared/io/Print \
                          $ENV{ISSM_DIR}/src/c/shared/io/Comm \
                          $ENV{ISSM_DIR}/src/c/shared/LatLong \
                          $ENV{ISSM_DIR}/src/c/shared/Enum \
                          $ENV{ISSM_DIR}/src/c/shared/Numerics \
                          $ENV{ISSM_DIR}/src/c/shared/Exceptions \
                          $ENV{ISSM_DIR}/src/c/shared/Sorting \
                          $ENV{ISSM_DIR}/src/c/shared/Elements \
                          $ENV{ISSM_DIR}/src/c/shared/String \
                          $ENV{ISSM_DIR}/src/c/toolkits \
                          $ENV{ISSM_DIR}/src/c/toolkits/metis \
                          $ENV{ISSM_DIR}/src/c/toolkits/issm \
                          $ENV{ISSM_DIR}/src/c/toolkits/adolc \
                          $ENV{ISSM_DIR}/src/c/toolkits/triangle \
                          $ENV{ISSM_DIR}/src/c/toolkits/objects \
                          $ENV{ISSM_DIR}/src/c/modules \
                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx \
                          $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx \
                          $ENV{ISSM_DIR}/src/c/modules/NodesDofx \
                          $ENV{ISSM_DIR}/src/c/modules/NodalValuex \
                          $ENV{ISSM_DIR}/src/c/modules/VerticesDofx \
                          $ENV{ISSM_DIR}/src/c/modules/VertexCoordinatesx \
                          $ENV{ISSM_DIR}/src/c/modules/OutputResultsx \
                          $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex \
                          $ENV{ISSM_DIR}/src/c/modules/InputScalex \
                          $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax \
                          $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx \
                          $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx \
                          $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx \
                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx \
                          $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx \
                          $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx \
                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx \
                          $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex \
                          $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx \
                          $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx \
                          $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex \
                          $ENV{ISSM_DIR}/src/c/modules/SpcNodesx \
                          $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx \
                          $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx \
                          $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx \
                          $ENV{ISSM_DIR}/src/c/modules/MeshPartitionx \
                          $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx \
                          $ENV{ISSM_DIR}/src/c/modules/Reduceloadx \
                          $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex \
                          $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx \
                          $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx \
                          $ENV{ISSM_DIR}/src/c/modules/Solverx \
                          $ENV{ISSM_DIR}/src/c/modules/VecMergex \
                          $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx \
                          $ENV{ISSM_DIR}/src/c/modules/InputToResultx \
                          $ENV{ISSM_DIR}/src/c/analyses \
                          $ENV{ISSM_DIR}/src/c/solutionsequences \
                          $ENV{ISSM_DIR}/src/c/solutionsequences \
# }}}
# Core Sources{{{
set(core_sources   	./datastructures/DataSet.cpp\
					./classes/gauss/GaussTria.cpp\
					./classes/FemModel.cpp\
					./classes/Loads/Friction.cpp\
					./classes/Inputs/TransientInput.cpp\
					./classes/Constraints/SpcTransient.cpp\
					./classes/IndependentObject.cpp\
					./classes/DependentObject.cpp\
					./classes/DofIndexing.cpp\
					./classes/IoModel.cpp\
					./classes/Contours.cpp\
					./classes/Nodes.cpp\
					./classes/Vertices.cpp\
					./classes/Node.cpp\
					./classes/Vertex.cpp\
					./classes/Hook.cpp\
					./classes/Patch.cpp\
					./classes/ElementResults/DoubleElementResult.cpp\
					./classes/ElementResults/TriaP1ElementResult.cpp\
					./classes/ElementResults/BoolElementResult.cpp\
					./classes/ExternalResults/Results.cpp\
					./classes/Elements/Elements.cpp\
					./classes/Elements/ElementHook.cpp\
					./classes/Elements/Tria.cpp\
					./classes/Elements/TriaRef.cpp\
					./classes/Inputs/Inputs.cpp\
					./classes/Inputs/TriaInput.cpp\
					./classes/Inputs/BoolInput.cpp\
					./classes/Inputs/IntInput.cpp\
					./classes/Inputs/DoubleInput.cpp\
					./classes/Inputs/DatasetInput.cpp\
					./classes/Materials/Materials.cpp\
					./classes/Materials/Matice.cpp\
					./classes/Materials/Matdamageice.cpp\
					./classes/Materials/Matpar.cpp\
					./classes/Constraints/Constraints.cpp\
					./classes/Constraints/SpcStatic.cpp\
					./classes/Constraints/SpcDynamic.cpp\
					./classes/Loads/Loads.cpp\
					./classes/Loads/Penpair.cpp\
					./classes/Loads/Pengrid.cpp\
					./classes/Loads/Icefront.cpp\
					./classes/Loads/Numericalflux.cpp\
					./classes/matrix/ElementMatrix.cpp\
					./classes/matrix/ElementVector.cpp\
					./classes/Params/Parameters.cpp\
					./classes/Params/BoolParam.cpp\
					./classes/Params/IntParam.cpp\
					./classes/Params/IntVecParam.cpp\
					./classes/Params/IntMatParam.cpp\
					./classes/Params/DoubleParam.cpp\
					./classes/Params/FileParam.cpp\
					./classes/Params/StringArrayParam.cpp\
					./classes/Params/DoubleMatParam.cpp\
					./classes/Params/DoubleTransientMatParam.cpp\
					./classes/Params/DoubleMatArrayParam.cpp\
					./classes/Params/DoubleVecParam.cpp\
					./classes/Params/StringParam.cpp\
					./classes/Params/MatrixParam.cpp\
					./classes/Params/VectorParam.cpp\
					./classes/Params/TransientParam.cpp\
					./classes/Params/DataSetParam.cpp\
					./classes/Profiler.cpp\
					./shared/Matrix/MatrixUtils.cpp\
					./shared/io/Disk/pfopen.cpp\
					./shared/io/Disk/pfclose.cpp\
					./shared/io/Disk/WriteLockFile.cpp\
					./shared/io/Print/PrintfFunction.cpp\
					./shared/io/Comm/IssmComm.cpp\
					./shared/LatLong/Ll2xyx.cpp\
					./shared/LatLong/Xy2llx.cpp\
					./shared/Enum/EnumToStringx.cpp\
					./shared/Enum/StringToEnumx.cpp\
					./shared/Numerics/Verbosity.cpp\
					./shared/Numerics/GaussPoints.cpp\
					./shared/Numerics/cross.cpp\
					./shared/Numerics/isnan.cpp\
					./shared/Numerics/cubic.cpp\
					./shared/Numerics/extrema.cpp\
					./shared/Numerics/XZvectorsToCoordinateSystem.cpp\
					./shared/Exceptions/Exceptions.cpp\
					./shared/Exceptions/exprintf.cpp\
					./shared/Sorting/binary_search.cpp\
					./shared/Elements/Paterson.cpp\
					./shared/Elements/Arrhenius.cpp\
					./shared/Elements/PrintArrays.cpp\
					./shared/Elements/PddSurfaceMassBalance.cpp\
					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
					./shared/String/DescriptorIndex.cpp\
					./toolkits/issm/IssmToolkitUtils.cpp\
					./toolkits/issm/IssmSolver.cpp\
					./toolkits/ToolkitOptions.cpp\
					./modules/ModelProcessorx/ModelProcessorx.cpp\
					./modules/ModelProcessorx/DistributeNumDofs.cpp\
					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
					./modules/ModelProcessorx/NodesPartitioning.cpp\
					./modules/ModelProcessorx/SortDataSets.cpp\
					./modules/ModelProcessorx/UpdateCounters.cpp\
					./modules/ModelProcessorx/CreateDataSets.cpp\
					./modules/ModelProcessorx/CreateParameters.cpp\
					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
					./modules/NodesDofx/NodesDofx.cpp\
					./modules/NodalValuex/NodalValuex.cpp\
					./modules/VerticesDofx/VerticesDofx.cpp\
					./modules/VertexCoordinatesx/VertexCoordinatesx.cpp\
					./modules/OutputResultsx/OutputResultsx.cpp\
					./modules/InputDuplicatex/InputDuplicatex.cpp\
					./modules/InputScalex/InputScalex.cpp\
					./modules/SurfaceAreax/SurfaceAreax.cpp\
					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp\
					./modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp\
					./modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\
					./modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp\
					./modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp\
					./modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp\
					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp\
					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
					./modules/ComputeBasalStressx/ComputeBasalStressx.cpp\
					./modules/ComputeStrainRatex/ComputeStrainRatex.cpp\
					./modules/SpcNodesx/SpcNodesx.cpp\
					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
					./modules/SmbGradientsx/SmbGradientsx.cpp\
					./modules/Reducevectorgtofx/Reducevectorgtofx.cpp\
					./modules/Reduceloadx/Reduceloadx.cpp\
					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
					./modules/ResetConstraintsx/ResetConstraintsx.cpp\
					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp\
					./modules/Solverx/Solverx.cpp\
					./modules/VecMergex/VecMergex.cpp\
					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
					./modules/InputToResultx/InputToResultx.cpp\
					./analyses/ProcessArguments.cpp\
					./analyses/ResetBoundaryConditions.cpp\
					./analyses/AnalysisConfiguration.cpp\
					./analyses/WrapperCorePointerFromSolutionEnum.cpp\
					./analyses/CorePointerFromSolutionEnum.cpp\
					./analyses/EnvironmentInit.cpp\
					./analyses/EnvironmentFinalize.cpp\
					./analyses/ad_core.cpp\
					./solutionsequences/solutionsequence_linear.cpp\
					./solutionsequences/solutionsequence_nonlinear.cpp\
					./solutionsequences/solutionsequence_newton.cpp\
					./solutionsequences/convergence.cpp\
					./classes/Options/Options.cpp\
					./classes/Options/OptionUtilities.cpp\
					./classes/RiftStruct.cpp\
# }}}

add_library(ISSMCore STATIC ${core_sources})
add_executable(issm ./main/issm.cpp)
