Loading src/functions/tnlMeshFunctionEvaluator.h +28 −2 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ class tnlMeshFunctionEvaluatorTraverserUserData template< typename MeshType, typename UserData > class tnlMeshFunctionEvaluatorEntitiesProcessor class tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor { public: Loading @@ -203,12 +203,38 @@ class tnlMeshFunctionEvaluatorEntitiesProcessor { typedef tnlFunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter; ( *userData.meshFunction )( entity ) = *userData.outFunctionMultiplicator * ( *userData.meshFunction )( entity ) + *userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, *userData.time ); /*cerr << "Idx = " << entity.getIndex() << " Value = " << FunctionAdapter::getValue( *userData.function, entity, *userData.time ) << " stored value = " << ( *userData.meshFunction )( entity ) << " multiplicators = " << endl;*/ } }; template< typename MeshType, typename UserData > class tnlMeshFunctionEvaluatorAdditionEntitiesProcessor { public: template< typename EntityType > __cuda_callable__ static inline void processEntity( const MeshType& mesh, UserData& userData, const EntityType& entity ) { typedef tnlFunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter; ( *userData.meshFunction )( entity ) = *userData.outFunctionMultiplicator * ( *userData.meshFunction )( entity ) + *userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, *userData.time ); /*cerr << "Idx = " << entity.getIndex() << " Value = " << FunctionAdapter::getValue( *userData.function, entity, *userData.time ) << " stored value = " << ( *userData.meshFunction )( entity ) << " multiplicators = " << endl;*/ } }; #include <functions/tnlMeshFunctionEvaluator_impl.h> Loading src/functions/tnlMeshFunctionEvaluator_impl.h +110 −50 Original line number Diff line number Diff line Loading @@ -74,7 +74,8 @@ evaluateEntities( OutMeshFunction& meshFunction, EntitiesType entitiesType ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { Loading @@ -83,20 +84,38 @@ evaluateEntities( OutMeshFunction& meshFunction, switch( entitiesType ) { case all: if( outFunctionMultiplicator ) meshTraverser.template processAllEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processAllEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case interior: if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case boundary: if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; Loading @@ -116,20 +135,38 @@ evaluateEntities( OutMeshFunction& meshFunction, switch( entitiesType ) { case all: if( outFunctionMultiplicator ) meshTraverser.template processAllEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processAllEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case interior: if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case boundary: if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; Loading @@ -141,7 +178,6 @@ evaluateEntities( OutMeshFunction& meshFunction, tnlCuda::freeFromDevice( kernelTime ); tnlCuda::freeFromDevice( kernelOutFunctionMultiplicator ); tnlCuda::freeFromDevice( kernelInFunctionMultiplicator ); checkCudaDevice; } } Loading @@ -159,16 +195,23 @@ evaluate( OutMeshFunction& meshFunction, const RealType& inFunctionMultiplicator ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { TraverserUserData userData( &operatorFunction, &time, &meshFunction, &outFunctionMultiplicator, &inFunctionMultiplicator ); tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); } if( std::is_same< MeshDeviceType, tnlCuda >::value ) { Loading @@ -184,10 +227,16 @@ evaluate( OutMeshFunction& meshFunction, TraverserUserData userData( kernelOperatorFunction, kernelTime, kernelMeshFunction, kernelOutFunctionMultiplicator, kernelInFunctionMultiplicator ); checkCudaDevice; tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); checkCudaDevice; tnlCuda::freeFromDevice( kernelMeshFunction ); Loading @@ -214,16 +263,23 @@ evaluate( OutMeshFunction& meshFunction, const RealType& inFunctionMultiplicator ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { TraverserUserData userData( &operatorFunction, &time, &meshFunction, &outFunctionMultiplicator, &inFunctionMultiplicator ); tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); } if( std::is_same< MeshDeviceType, tnlCuda >::value ) { Loading @@ -239,10 +295,17 @@ evaluate( OutMeshFunction& meshFunction, TraverserUserData userData( kernelOperatorFunction, kernelTime, kernelMeshFunction, kernelOutFunctionMultiplicator, kernelInFunctionMultiplicator ); checkCudaDevice; tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); checkCudaDevice; tnlCuda::freeFromDevice( kernelMeshFunction ); Loading @@ -252,12 +315,9 @@ evaluate( OutMeshFunction& meshFunction, tnlCuda::freeFromDevice( kernelTime ); tnlCuda::freeFromDevice( kernelOutFunctionMultiplicator ); tnlCuda::freeFromDevice( kernelInFunctionMultiplicator ); checkCudaDevice; } } #endif /* TNLMESHFUNCTIONEVALUATOR_IMPL_H */ src/solvers/pde/tnlBoundaryConditionsSetter.h +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ class tnlBoundaryConditionsSetter TraverserUserData& userData, const GridEntity& entity ) { userData.boundaryConditions->getValue ( *userData.u )( entity ) = userData.boundaryConditions->getValue ( entity, *userData.u, *userData.time ); Loading tests/unit-tests/operators/diffusion/tnlLinearDiffusionTest.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -49,13 +49,12 @@ class tnlPDEOperatorEocTestResult< tnlLinearDiffusion< tnlGrid< Dimensions, Real int main( int argc, char* argv[] ) { const bool verbose( false ); const int MeshSize( 32 ); const bool verbose( true ); const int MeshSize( 128 ); #ifdef HAVE_CPPUNIT /**** * Explicit approximation */ cerr << "*****" << endl; if( ! tnlUnitTestStarter :: run< tnlPDEOperatorEocTester< tnlLinearDiffusion< tnlGrid< 1, double, tnlHost, int >, double, int >, tnlExactLinearDiffusion< 1 >, tnlExpBumpFunction< 1, double >, Loading tests/unit-tests/operators/tnlPDEOperatorEocTestSetter.h +3 −3 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ class tnlPDEOperatorEocTestSetter< ApproximateOperator, const IndexType& size ) { VertexType origin, proportions; origin.x() = -1.0; proportions.x() = 2.0; origin.x() = -2.0; proportions.x() = 4.0; mesh.setDomain( origin, proportions ); CoordinatesType dimensions; Loading @@ -65,7 +65,7 @@ class tnlPDEOperatorEocTestSetter< ApproximateOperator, static void setFunction( FunctionType& function ) { function.setAmplitude( 1.0 ); function.setAmplitude( 1.5 ); function.setSigma( 0.5 ); }; }; Loading Loading
src/functions/tnlMeshFunctionEvaluator.h +28 −2 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ class tnlMeshFunctionEvaluatorTraverserUserData template< typename MeshType, typename UserData > class tnlMeshFunctionEvaluatorEntitiesProcessor class tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor { public: Loading @@ -203,12 +203,38 @@ class tnlMeshFunctionEvaluatorEntitiesProcessor { typedef tnlFunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter; ( *userData.meshFunction )( entity ) = *userData.outFunctionMultiplicator * ( *userData.meshFunction )( entity ) + *userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, *userData.time ); /*cerr << "Idx = " << entity.getIndex() << " Value = " << FunctionAdapter::getValue( *userData.function, entity, *userData.time ) << " stored value = " << ( *userData.meshFunction )( entity ) << " multiplicators = " << endl;*/ } }; template< typename MeshType, typename UserData > class tnlMeshFunctionEvaluatorAdditionEntitiesProcessor { public: template< typename EntityType > __cuda_callable__ static inline void processEntity( const MeshType& mesh, UserData& userData, const EntityType& entity ) { typedef tnlFunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter; ( *userData.meshFunction )( entity ) = *userData.outFunctionMultiplicator * ( *userData.meshFunction )( entity ) + *userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, *userData.time ); /*cerr << "Idx = " << entity.getIndex() << " Value = " << FunctionAdapter::getValue( *userData.function, entity, *userData.time ) << " stored value = " << ( *userData.meshFunction )( entity ) << " multiplicators = " << endl;*/ } }; #include <functions/tnlMeshFunctionEvaluator_impl.h> Loading
src/functions/tnlMeshFunctionEvaluator_impl.h +110 −50 Original line number Diff line number Diff line Loading @@ -74,7 +74,8 @@ evaluateEntities( OutMeshFunction& meshFunction, EntitiesType entitiesType ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { Loading @@ -83,20 +84,38 @@ evaluateEntities( OutMeshFunction& meshFunction, switch( entitiesType ) { case all: if( outFunctionMultiplicator ) meshTraverser.template processAllEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processAllEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case interior: if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case boundary: if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; Loading @@ -116,20 +135,38 @@ evaluateEntities( OutMeshFunction& meshFunction, switch( entitiesType ) { case all: if( outFunctionMultiplicator ) meshTraverser.template processAllEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processAllEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case interior: if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; case boundary: if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); break; Loading @@ -141,7 +178,6 @@ evaluateEntities( OutMeshFunction& meshFunction, tnlCuda::freeFromDevice( kernelTime ); tnlCuda::freeFromDevice( kernelOutFunctionMultiplicator ); tnlCuda::freeFromDevice( kernelInFunctionMultiplicator ); checkCudaDevice; } } Loading @@ -159,16 +195,23 @@ evaluate( OutMeshFunction& meshFunction, const RealType& inFunctionMultiplicator ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { TraverserUserData userData( &operatorFunction, &time, &meshFunction, &outFunctionMultiplicator, &inFunctionMultiplicator ); tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); } if( std::is_same< MeshDeviceType, tnlCuda >::value ) { Loading @@ -184,10 +227,16 @@ evaluate( OutMeshFunction& meshFunction, TraverserUserData userData( kernelOperatorFunction, kernelTime, kernelMeshFunction, kernelOutFunctionMultiplicator, kernelInFunctionMultiplicator ); checkCudaDevice; tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processInteriorEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processInteriorEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); checkCudaDevice; tnlCuda::freeFromDevice( kernelMeshFunction ); Loading @@ -214,16 +263,23 @@ evaluate( OutMeshFunction& meshFunction, const RealType& inFunctionMultiplicator ) { typedef typename MeshType::template MeshEntity< OutMeshFunction::getMeshEntityDimensions() > MeshEntityType; typedef tnlMeshFunctionEvaluatorEntitiesProcessor< MeshType, TraverserUserData > EntitiesProcessor; typedef tnlMeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData > AssignmentEntitiesProcessor; typedef tnlMeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor; if( std::is_same< MeshDeviceType, tnlHost >::value ) { TraverserUserData userData( &operatorFunction, &time, &meshFunction, &outFunctionMultiplicator, &inFunctionMultiplicator ); tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processBoundaryEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); } if( std::is_same< MeshDeviceType, tnlCuda >::value ) { Loading @@ -239,10 +295,17 @@ evaluate( OutMeshFunction& meshFunction, TraverserUserData userData( kernelOperatorFunction, kernelTime, kernelMeshFunction, kernelOutFunctionMultiplicator, kernelInFunctionMultiplicator ); checkCudaDevice; tnlTraverser< MeshType, MeshEntityType > meshTraverser; meshTraverser.template processInteriorEntities< TraverserUserData, EntitiesProcessor > if( outFunctionMultiplicator ) meshTraverser.template processBoundaryEntities< TraverserUserData, AdditionEntitiesProcessor > ( meshFunction.getMesh(), userData ); else meshTraverser.template processBoundaryEntities< TraverserUserData, AssignmentEntitiesProcessor > ( meshFunction.getMesh(), userData ); checkCudaDevice; tnlCuda::freeFromDevice( kernelMeshFunction ); Loading @@ -252,12 +315,9 @@ evaluate( OutMeshFunction& meshFunction, tnlCuda::freeFromDevice( kernelTime ); tnlCuda::freeFromDevice( kernelOutFunctionMultiplicator ); tnlCuda::freeFromDevice( kernelInFunctionMultiplicator ); checkCudaDevice; } } #endif /* TNLMESHFUNCTIONEVALUATOR_IMPL_H */
src/solvers/pde/tnlBoundaryConditionsSetter.h +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ class tnlBoundaryConditionsSetter TraverserUserData& userData, const GridEntity& entity ) { userData.boundaryConditions->getValue ( *userData.u )( entity ) = userData.boundaryConditions->getValue ( entity, *userData.u, *userData.time ); Loading
tests/unit-tests/operators/diffusion/tnlLinearDiffusionTest.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -49,13 +49,12 @@ class tnlPDEOperatorEocTestResult< tnlLinearDiffusion< tnlGrid< Dimensions, Real int main( int argc, char* argv[] ) { const bool verbose( false ); const int MeshSize( 32 ); const bool verbose( true ); const int MeshSize( 128 ); #ifdef HAVE_CPPUNIT /**** * Explicit approximation */ cerr << "*****" << endl; if( ! tnlUnitTestStarter :: run< tnlPDEOperatorEocTester< tnlLinearDiffusion< tnlGrid< 1, double, tnlHost, int >, double, int >, tnlExactLinearDiffusion< 1 >, tnlExpBumpFunction< 1, double >, Loading
tests/unit-tests/operators/tnlPDEOperatorEocTestSetter.h +3 −3 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ class tnlPDEOperatorEocTestSetter< ApproximateOperator, const IndexType& size ) { VertexType origin, proportions; origin.x() = -1.0; proportions.x() = 2.0; origin.x() = -2.0; proportions.x() = 4.0; mesh.setDomain( origin, proportions ); CoordinatesType dimensions; Loading @@ -65,7 +65,7 @@ class tnlPDEOperatorEocTestSetter< ApproximateOperator, static void setFunction( FunctionType& function ) { function.setAmplitude( 1.0 ); function.setAmplitude( 1.5 ); function.setSigma( 0.5 ); }; }; Loading