From 1acfa6a66c0ea823fa6ea476b65c9c1385eb8870 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 09:36:12 -0400 Subject: [PATCH 01/14] fix initialization of AMR update flags --- src/matrixfree/AdaptiveRefinement.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/matrixfree/AdaptiveRefinement.cc b/src/matrixfree/AdaptiveRefinement.cc index 4c2418af3..e618bd4ee 100644 --- a/src/matrixfree/AdaptiveRefinement.cc +++ b/src/matrixfree/AdaptiveRefinement.cc @@ -51,7 +51,7 @@ AdaptiveRefinement::adaptive_refinement_criterion() const unsigned int num_quad_points = quadrature.size(); // Set the update flags - dealii::UpdateFlags update_flags; + dealii::UpdateFlags update_flags = update_default; for (const auto &criterion : userInputs.refinement_criteria) { if (criterion.criterion_type & criterion_value) From f0974a8e5e6f5ac4be416cffc7e626b88c9d2240 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 10:58:12 -0400 Subject: [PATCH 02/14] python script to run each application in debug mode with 1 timestep --- .../automatic_tests/application_debug_test.py | 207 ++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 tests/automatic_tests/application_debug_test.py diff --git a/tests/automatic_tests/application_debug_test.py b/tests/automatic_tests/application_debug_test.py new file mode 100644 index 000000000..d337df7aa --- /dev/null +++ b/tests/automatic_tests/application_debug_test.py @@ -0,0 +1,207 @@ +import os +import subprocess +import shutil +from concurrent.futures import ProcessPoolExecutor + + +def does_filepath_exist(filepath): + """Function to check that a certain filepath exists + + Args: + filepath (string): The absolute filepath + + Raises: + FileNotFoundError: An error if the filepath does not exist + + Returns: + Bool: Whether the filepath exists + """ + if os.path.exists(filepath): + return True + else: + raise FileNotFoundError(f"{filepath} does not exist") + + +def get_application_path(app_name): + """Function that returns that absolute path for the specified application + + Args: + app_name (string): The application name + + Returns: + String: Absolute application path + """ + # Current directory + pwd = os.getcwd() + + # Check that we're in the automatic test directory + assert ( + "tests/automatic_tests" in pwd + ), "Current directory is not within 'tests/automatic_tests'" + + # Application path assuming file structure matches GitHub repo + app_path = pwd.replace("tests/automatic_tests", f"applications/{app_name}") + + return app_path + + +def set_timestep(number, app_dir, new_parameter_file): + """Function that write create a copy of the of the parameters.prm file + in the given application directory and set the number of timesteps + + Args: + number (int): Number of timesteps + app_dir (string): Absolute filepath for application directory + new_parameter_file (string): Name of new parameters.prm + """ + # Absolute path of the parameters file + parameter_file_path = app_dir + "/parameters.prm" + + # Check that the filepath exists + does_filepath_exist(parameter_file_path) + + # Make a copy of the original parameters file + new_parameter_file_path = app_dir + f"/{new_parameter_file}" + shutil.copy(parameter_file_path, new_parameter_file_path) + print(f"Copied {parameter_file_path} to {new_parameter_file_path}.") + + # Set the new number of timesteps, making sure to remove simulation end time if there + with open(new_parameter_file_path, "r") as file: + lines = file.readlines() + + with open(new_parameter_file_path, "w") as file: + for line in lines: + if "set Number of time steps" in line: + file.write(f"set Number of time steps = {number}\n") + if "set Simulation end time" in line: + file.write("\n") + print( + f"Updated {new_parameter_file} in {app_dir} to set Number of time steps to {number}." + ) + + +def compile_and_run(app_name, new_parameter_file, test_dir): + """Function that compile and runs the application in debug mode + + Args: + app_name (string): Application name + new_parameter_file (string): Parameter file + test_dir (string): Automatic test directory + + Returns: + String: Whether the application was able to succeed or not. The first return + is the application name and the second is success or failure + """ + try: + # Navigate to tests/automatic_tests + os.chdir(test_dir) + + # Grab application path + app_dir = get_application_path(app_name) + + # Navigate to application directory + os.chdir(app_dir) + + # Compile the application in debug mode + if os.path.exists("CMakeCache.txt"): + os.remove("CMakeCache.txt") + print(f"Compiling {app_dir}...") + subprocess.run(["cmake", "."]) + subprocess.run(["make", "debug"]) + + # Run the application + subprocess.run(["./main", "-i", new_parameter_file]) + + # Clean up + os.remove("CMakeCache.txt") + os.remove("main") + os.remove(new_parameter_file) + + # Return success + return (app_name, "Success") + + except Exception as exc: + return (app_name, f"Failed: {str(exc)}") + + +def run_tests_in_parallel(application_list): + """Run each test in parallel + + Args: + application_list (list): A list of application names + + Returns: + Dict: Dictionary that track the success/failure of each application + """ + # Parameter file name + new_parameter_file = "parameters_new.prm" + + # Grab currnet directory which should be the automatic test directory + test_dir = os.getcwd() + + # Update parameter file for one timestep + for app_name in application_list: + # Grab application path + app_dir = get_application_path(app_name) + + # Set timestep + set_timestep(1, app_dir, new_parameter_file) + + # Dictionary for results + results = {} + + # Run each task in parallel + with ProcessPoolExecutor() as executor: + futures = [ + executor.submit(compile_and_run, app_name, new_parameter_file, test_dir) + for app_name in application_list + ] + for future in futures: + app_name, status = future.result() + results[app_name] = status + + return results + + +# Application list +application_list = [ + "CHAC_anisotropy", + "corrosion", + "CHAC_anisotropyRegularized", + "corrosion_microgalvanic", + "CHAC_performance_test", + "coupledCahnHilliardAllenCahn", + "CHiMaD_benchmark1a", + "dendriticSolidification", + "CHiMaD_benchmark2a", + "eshelbyInclusion", + "CHiMaD_benchmark3", + "fickianDiffusion", + "CHiMaD_benchmark6a", + "grainGrowth", + "CHiMaD_benchmark6b", + "grainGrowth_dream3d", + "CHiMaD_benchmark7", + "mechanics", + "MgNd_precipitate_single_Bppp", + "nucleationModel", + "allenCahn", + "nucleationModel_preferential", + "allenCahn_conserved", + "alloySolidification", + "precipitateEvolution", + "precipitateEvolution_pfunction", + "alloySolidification_uniform", + "spinodalDecomposition", + "anisotropyFacet", + "steadyStateAllenCahn", + "cahnHilliard", +] + +# Run tests in parallel +results = run_tests_in_parallel(application_list) + +# Print the results +print("\n\nCompilation and Execution Results:") +for app_name, status in results.items(): + print(f"{app_name}: {status}") From eeb997d14ab3eeedfaec03f1f4c771948e5ea898 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 16:45:56 -0400 Subject: [PATCH 03/14] fixes to script so parameter file is copied correctly and more summary stats --- .../automatic_tests/application_debug_test.py | 67 +++++++++++++++---- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/tests/automatic_tests/application_debug_test.py b/tests/automatic_tests/application_debug_test.py index d337df7aa..5bb5bba6d 100644 --- a/tests/automatic_tests/application_debug_test.py +++ b/tests/automatic_tests/application_debug_test.py @@ -1,6 +1,7 @@ import os import subprocess import shutil +import glob from concurrent.futures import ProcessPoolExecutor @@ -55,13 +56,13 @@ def set_timestep(number, app_dir, new_parameter_file): new_parameter_file (string): Name of new parameters.prm """ # Absolute path of the parameters file - parameter_file_path = app_dir + "/parameters.prm" + parameter_file_path = os.path.join(app_dir, "parameters.prm") # Check that the filepath exists does_filepath_exist(parameter_file_path) # Make a copy of the original parameters file - new_parameter_file_path = app_dir + f"/{new_parameter_file}" + new_parameter_file_path = os.path.join(app_dir, new_parameter_file) shutil.copy(parameter_file_path, new_parameter_file_path) print(f"Copied {parameter_file_path} to {new_parameter_file_path}.") @@ -69,12 +70,19 @@ def set_timestep(number, app_dir, new_parameter_file): with open(new_parameter_file_path, "r") as file: lines = file.readlines() + set_n_timesteps = False with open(new_parameter_file_path, "w") as file: for line in lines: - if "set Number of time steps" in line: + if "set Number of time steps" in line and not set_n_timesteps: file.write(f"set Number of time steps = {number}\n") - if "set Simulation end time" in line: + set_n_timesteps = True + elif "set Simulation end time" in line and not set_n_timesteps: + file.write(f"set Number of time steps = {number}\n") + set_n_timesteps = True + elif "set Simulation end time" in line and set_n_timesteps: file.write("\n") + else: + file.write(line) print( f"Updated {new_parameter_file} in {app_dir} to set Number of time steps to {number}." ) @@ -101,27 +109,52 @@ def compile_and_run(app_name, new_parameter_file, test_dir): # Navigate to application directory os.chdir(app_dir) + print(f"Currently in {os.getcwd()}") # Compile the application in debug mode if os.path.exists("CMakeCache.txt"): os.remove("CMakeCache.txt") - print(f"Compiling {app_dir}...") - subprocess.run(["cmake", "."]) - subprocess.run(["make", "debug"]) + print(f"Compiling {app_dir}") + compile_result = subprocess.run( + ["cmake", "."], check=True, capture_output=True, text=True + ) + make_result = subprocess.run( + ["make", "debug"], check=True, capture_output=True, text=True + ) # Run the application - subprocess.run(["./main", "-i", new_parameter_file]) + print(f"Running {app_dir} with parameter file {new_parameter_file}") + run_result = subprocess.run( + ["mpirun", "-n", "1", "./main", "-i", new_parameter_file], + check=True, + capture_output=True, + text=True, + ) # Clean up + print(f"Cleaning up {app_dir}") os.remove("CMakeCache.txt") os.remove("main") + os.remove("integratedFields.txt") + for solution_file in glob.glob("solution-*.vtu"): + os.remove(solution_file) + for restart_file in glob.glob("restart.*"): + os.remove(restart_file) os.remove(new_parameter_file) # Return success - return (app_name, "Success") + return ( + app_name, + "Success", + compile_result.stdout + make_result.stdout + run_result.stdout, + ) + + except subprocess.CalledProcessError as exc: + error_output = exc.stderr if exc.stderr else str(exc) + return (app_name, f"Failed: {error_output}", "") except Exception as exc: - return (app_name, f"Failed: {str(exc)}") + return (app_name, f"Failed: {str(exc)}", "") def run_tests_in_parallel(application_list): @@ -157,8 +190,8 @@ def run_tests_in_parallel(application_list): for app_name in application_list ] for future in futures: - app_name, status = future.result() - results[app_name] = status + app_name, status, output = future.result() + results[app_name] = (status, output) return results @@ -203,5 +236,13 @@ def run_tests_in_parallel(application_list): # Print the results print("\n\nCompilation and Execution Results:") -for app_name, status in results.items(): +passed_count = 0 + +for app_name, (status, output) in results.items(): print(f"{app_name}: {status}") + if status == "Success": + passed_count += 1 + else: + print(f"Error details:\n{output}\n") + +print(f"\nTotal applications passed: {passed_count} out of {len(results)}") From 76f4c2c40b93503502612a09b90011360c944af6 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 18:17:04 -0400 Subject: [PATCH 04/14] check that integrated file exists before deleting --- tests/automatic_tests/application_debug_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/automatic_tests/application_debug_test.py b/tests/automatic_tests/application_debug_test.py index 5bb5bba6d..47daa0f35 100644 --- a/tests/automatic_tests/application_debug_test.py +++ b/tests/automatic_tests/application_debug_test.py @@ -135,7 +135,8 @@ def compile_and_run(app_name, new_parameter_file, test_dir): print(f"Cleaning up {app_dir}") os.remove("CMakeCache.txt") os.remove("main") - os.remove("integratedFields.txt") + if os.path.exists("integratedFields.txt"): + os.remove("integratedFields.txt") for solution_file in glob.glob("solution-*.vtu"): os.remove(solution_file) for restart_file in glob.glob("restart.*"): From 2c4e2ee96dbbd2c4e20af135e12e85d4fb21f508 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 18:19:39 -0400 Subject: [PATCH 05/14] deleting old submission scripts --- .../CHiMaD_benchmark6a/submit_mpi.pbs | 28 ------------------- .../CHiMaD_benchmark6b/submit_mpi.pbs | 28 ------------------- 2 files changed, 56 deletions(-) delete mode 100644 applications/CHiMaD_benchmarks/CHiMaD_benchmark6a/submit_mpi.pbs delete mode 100644 applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/submit_mpi.pbs diff --git a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6a/submit_mpi.pbs b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6a/submit_mpi.pbs deleted file mode 100644 index df5febc74..000000000 --- a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6a/submit_mpi.pbs +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -#### PBS preamble - -#PBS -l nodes=1:ppn=8,pmem=4gb,walltime=2:00:00 -#PBS -o out.txt -#PBS -e err.txt -#PBS -N chimad_bp2a -#PBS -V -#PBS -A kthorn_flux -#PBS -q flux -#PBS -l qos=flux - -# End PBS Settings -############################### - -# Change to the directory you submitted from -if [ -n "$PBS_O_WORKDIR" ]; then cd $PBS_O_WORKDIR; fi - -mkdir /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2a/ - -cp main /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2a/ -cp parameters.in /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2a/ - -cd /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2a/ - -# For mpi run -mpirun -n 8 ./main diff --git a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/submit_mpi.pbs b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/submit_mpi.pbs deleted file mode 100644 index 4c0c1c6e4..000000000 --- a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/submit_mpi.pbs +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -#### PBS preamble - -#PBS -l nodes=2:ppn=8,pmem=4gb,walltime=2:00:00 -#PBS -o out.txt -#PBS -e err.txt -#PBS -N chimad_bp2b -#PBS -V -#PBS -A kthorn_flux -#PBS -q flux -#PBS -l qos=flux - -# End PBS Settings -############################### - -# Change to the directory you submitted from -if [ -n "$PBS_O_WORKDIR" ]; then cd $PBS_O_WORKDIR; fi - -mkdir /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2b/ - -cp main /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2b/ -cp parameters.in /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2b/ - -cd /scratch/kthorn_flux/dmontiel/CH_electrostatics_bp_2b/ - -# For mpi run -mpirun -n 16 ./main From 46a49563af5ba09418498e86ea3bf0d8a0e2c896 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 18:38:18 -0400 Subject: [PATCH 06/14] set default num of checkpoints to 0 --- src/inputFileReader/inputFileReader.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inputFileReader/inputFileReader.cc b/src/inputFileReader/inputFileReader.cc index 00e4f644b..7b474dcfe 100644 --- a/src/inputFileReader/inputFileReader.cc +++ b/src/inputFileReader/inputFileReader.cc @@ -555,7 +555,7 @@ inputFileReader::declare_parameters(dealii::ParameterHandler ¶meter_hand "The list of time steps to save checkpoints, used for the LIST type."); parameter_handler.declare_entry( "Number of checkpoints", - "1", + "0", dealii::Patterns::Integer(), "The number of checkpoints (or number of checkpoints per decade for the " "N_PER_DECADE type)."); From 1d0ce36898b7ed3edc6f90df520fb1bc3b7bb773 Mon Sep 17 00:00:00 2001 From: landinjm Date: Sat, 21 Sep 2024 19:02:27 -0400 Subject: [PATCH 07/14] Removing leftover integratedField.txt files --- .../fickianDiffusion/integratedFields.txt | 3 --- applications/grainGrowth/integratedFields.txt | 21 ------------------- .../integratedFields.txt | 2 -- 3 files changed, 26 deletions(-) delete mode 100644 applications/fickianDiffusion/integratedFields.txt delete mode 100644 applications/grainGrowth/integratedFields.txt delete mode 100644 applications/precipitateEvolution_pfunction/integratedFields.txt diff --git a/applications/fickianDiffusion/integratedFields.txt b/applications/fickianDiffusion/integratedFields.txt deleted file mode 100644 index 0486bcf32..000000000 --- a/applications/fickianDiffusion/integratedFields.txt +++ /dev/null @@ -1,3 +0,0 @@ -0 c_x 0 -5 c_x -50.42273226 -10 c_x -71.00777182 diff --git a/applications/grainGrowth/integratedFields.txt b/applications/grainGrowth/integratedFields.txt deleted file mode 100644 index c57b33fb5..000000000 --- a/applications/grainGrowth/integratedFields.txt +++ /dev/null @@ -1,21 +0,0 @@ -0 diff1 6.302753372 -2 diff1 9.272165056 -4 diff1 10.48934769 -6 diff1 9.87554228 -8 diff1 8.068710441 -10 diff1 4.365246041 -12 diff1 3.011654139 -14 diff1 2.078855898 -16 diff1 1.452358016 -18 diff1 1.076649095 -20 diff1 0.8341042436 -22 diff1 0.4586567388 -24 diff1 0.3095193461 -26 diff1 0.2290179444 -28 diff1 0.1510074249 -30 diff1 0.05453975367 -32 diff1 -0.009341608481 -34 diff1 -0.009585723581 -36 diff1 -0.008783314296 -38 diff1 -0.008392747583 -40 diff1 -0.008305823929 diff --git a/applications/precipitateEvolution_pfunction/integratedFields.txt b/applications/precipitateEvolution_pfunction/integratedFields.txt deleted file mode 100644 index ba0faea6a..000000000 --- a/applications/precipitateEvolution_pfunction/integratedFields.txt +++ /dev/null @@ -1,2 +0,0 @@ -0 f_tot -2961.102683 -1.2 f_tot -2965.677538 From 28c080273a7d8b03df58f49fe7f24744b73ae8fc Mon Sep 17 00:00:00 2001 From: Jason Landini Date: Mon, 23 Sep 2024 11:43:07 -0400 Subject: [PATCH 08/14] Adding pbs to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c8ad40df2..f9385a929 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ compile_commands.json *.exe *.out *.app +*.pbs #Output files *vtk From 5b3b8a66785fa381743ecf878f71284bf2e510ec Mon Sep 17 00:00:00 2001 From: Jason Landini Date: Mon, 30 Sep 2024 12:02:03 -0400 Subject: [PATCH 09/14] Deleting steadyStateAllenCahn --- .../steadyStateAllenCahn/CMakeLists.txt | 68 ------ .../steadyStateAllenCahn/ICs_and_BCs.cc | 56 ----- applications/steadyStateAllenCahn/customPDE.h | 90 ------- .../steadyStateAllenCahn/equations.cc | 159 ------------- .../formulation_allenCahn.pdf | Bin 105538 -> 0 bytes .../steadyStateAllenCahn/parameters.prm | 122 ---------- .../tex_files/allenCahn.tex | 223 ------------------ 7 files changed, 718 deletions(-) delete mode 100644 applications/steadyStateAllenCahn/CMakeLists.txt delete mode 100644 applications/steadyStateAllenCahn/ICs_and_BCs.cc delete mode 100644 applications/steadyStateAllenCahn/customPDE.h delete mode 100644 applications/steadyStateAllenCahn/equations.cc delete mode 100644 applications/steadyStateAllenCahn/formulation_allenCahn.pdf delete mode 100644 applications/steadyStateAllenCahn/parameters.prm delete mode 100644 applications/steadyStateAllenCahn/tex_files/allenCahn.tex diff --git a/applications/steadyStateAllenCahn/CMakeLists.txt b/applications/steadyStateAllenCahn/CMakeLists.txt deleted file mode 100644 index 31e2527fe..000000000 --- a/applications/steadyStateAllenCahn/CMakeLists.txt +++ /dev/null @@ -1,68 +0,0 @@ -## -# CMake script for the PRISMS-PF applications: -## - -cmake_minimum_required(VERSION 3.1.0) -project(myapp) - -# Find deal.II installation -find_package(deal.II 9.2.0 QUIET REQUIRED - HINTS ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR}) - -# Check to make sure deal.II is configured with p4est -if(NOT ${DEAL_II_WITH_P4EST}) - message(FATAL_ERROR "deal.II must be installed with p4est.") -endif() - -DEAL_II_INITIALIZE_CACHED_VARIABLES() - -# Set default build type -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE) -endif() - -# Set up the debug, release, and run targets -add_custom_target(debug - COMMAND +env ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR} - COMMAND +env ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all - COMMENT "Switch CMAKE_BUILD_TYPE to Debug" - ) -add_custom_target(release - COMMAND +env ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR} - COMMAND +env ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all - COMMENT "Switch CMAKE_BUILD_TYPE to Release" - ) -add_custom_target(run COMMAND main - COMMENT "Run with ${CMAKE_BUILD_TYPE} configuration" - ) - -# Add postprocess.cc and nucleation.cc if they exist -if(EXISTS "postprocess.cc") - add_definitions(-DPOSTPROCESS_FILE_EXISTS) -endif() -if(EXISTS "nucleation.cc") - add_definitions(-DNUCLEATION_FILE_EXISTS) -endif() - -# Set location of files -include_directories(${CMAKE_SOURCE_DIR}/../../include) -include_directories(${CMAKE_SOURCE_DIR}/../../src) -include_directories(${CMAKE_SOURCE_DIR}) - -# SEt the location of the main.cc file -set(MAIN "${CMAKE_SOURCE_DIR}/../main.cc") - -# Add main.cc for executable target -add_executable(main ${MAIN}) - -# deal.II linker -DEAL_II_SETUP_TARGET(main) - -# Link libraries for the build type -if (${CMAKE_BUILD_TYPE} STREQUAL "Release") - target_link_libraries(main ${CMAKE_SOURCE_DIR}/../../libprisms_pf.a) -elseif(${CMAKE_BUILD_TYPE} STREQUAL "DebugRelease") - target_link_libraries(main ${CMAKE_SOURCE_DIR}/../../libprisms_pf.a) -else() - target_link_libraries(main ${CMAKE_SOURCE_DIR}/../../libprisms_pf_debug.a) -endif() diff --git a/applications/steadyStateAllenCahn/ICs_and_BCs.cc b/applications/steadyStateAllenCahn/ICs_and_BCs.cc deleted file mode 100644 index 1f4b62968..000000000 --- a/applications/steadyStateAllenCahn/ICs_and_BCs.cc +++ /dev/null @@ -1,56 +0,0 @@ -// =========================================================================== -// FUNCTION FOR INITIAL CONDITIONS -// =========================================================================== - -template -void -customPDE::setInitialCondition([[maybe_unused]] const Point &p, - [[maybe_unused]] const unsigned int index, - [[maybe_unused]] double &scalar_IC, - [[maybe_unused]] Vector &vector_IC) -{ - // --------------------------------------------------------------------- - // ENTER THE INITIAL CONDITIONS HERE - // --------------------------------------------------------------------- - // Enter the function describing conditions for the fields at point "p". - // Use "if" statements to set the initial condition for each variable - // according to its variable index - - if (index == 0) - { - scalar_IC = 0.5 * (1.0 - std::tanh((p[0] - 50.0) / 1.5)); - } - else - { - scalar_IC = p[0] / 200.0; - } -} - -// =========================================================================== -// FUNCTION FOR NON-UNIFORM DIRICHLET BOUNDARY CONDITIONS -// =========================================================================== - -template -void -customPDE::setNonUniformDirichletBCs( - [[maybe_unused]] const Point &p, - [[maybe_unused]] const unsigned int index, - [[maybe_unused]] const unsigned int direction, - [[maybe_unused]] const double time, - [[maybe_unused]] double &scalar_BC, - [[maybe_unused]] Vector &vector_BC) -{ - // -------------------------------------------------------------------------- - // ENTER THE NON-UNIFORM DIRICHLET BOUNDARY CONDITIONS HERE - // -------------------------------------------------------------------------- - // Enter the function describing conditions for the fields at point "p". - // Use "if" statements to set the boundary condition for each variable - // according to its variable index. This function can be left blank if there - // are no non-uniform Dirichlet boundary conditions. For BCs that change in - // time, you can access the current time through the variable "time". The - // boundary index can be accessed via the variable "direction", which starts - // at zero and uses the same order as the BC specification in parameters.in - // (i.e. left = 0, right = 1, bottom = 2, top = 3, front = 4, back = 5). - - // ------------------------------------------------------------------------- -} diff --git a/applications/steadyStateAllenCahn/customPDE.h b/applications/steadyStateAllenCahn/customPDE.h deleted file mode 100644 index 1ef1f2663..000000000 --- a/applications/steadyStateAllenCahn/customPDE.h +++ /dev/null @@ -1,90 +0,0 @@ -#include "matrixFreePDE.h" - -using namespace dealii; - -template -class customPDE : public MatrixFreePDE -{ -public: - // Constructor - customPDE(userInputParameters _userInputs) - : MatrixFreePDE(_userInputs) - , userInputs(_userInputs) {}; - - // Function to set the initial conditions (in ICs_and_BCs.h) - void - setInitialCondition([[maybe_unused]] const Point &p, - [[maybe_unused]] const unsigned int index, - [[maybe_unused]] double &scalar_IC, - [[maybe_unused]] Vector &vector_IC) override; - - // Function to set the non-uniform Dirichlet boundary conditions (in - // ICs_and_BCs.h) - void - setNonUniformDirichletBCs([[maybe_unused]] const Point &p, - [[maybe_unused]] const unsigned int index, - [[maybe_unused]] const unsigned int direction, - [[maybe_unused]] const double time, - [[maybe_unused]] double &scalar_BC, - [[maybe_unused]] Vector &vector_BC) override; - -private: -#include "typeDefs.h" - - const userInputParameters userInputs; - - // Function to set the RHS of the governing equations for explicit time - // dependent equations (in equations.h) - void - explicitEquationRHS( - [[maybe_unused]] variableContainer> - &variable_list, - [[maybe_unused]] Point> q_point_loc) const override; - - // Function to set the RHS of the governing equations for all other equations - // (in equations.h) - void - nonExplicitEquationRHS( - [[maybe_unused]] variableContainer> - &variable_list, - [[maybe_unused]] Point> q_point_loc) const override; - - // Function to set the LHS of the governing equations (in equations.h) - void - equationLHS( - [[maybe_unused]] variableContainer> - &variable_list, - [[maybe_unused]] Point> q_point_loc) const override; - -// Function to set postprocessing expressions (in postprocess.h) -#ifdef POSTPROCESS_FILE_EXISTS - void - postProcessedFields( - [[maybe_unused]] const variableContainer> - &variable_list, - [[maybe_unused]] variableContainer> - &pp_variable_list, - [[maybe_unused]] const Point> q_point_loc) - const override; -#endif - -// Function to set the nucleation probability (in nucleation.h) -#ifdef NUCLEATION_FILE_EXISTS - double - getNucleationProbability([[maybe_unused]] variableValueContainer variable_value, - [[maybe_unused]] double dV) const override; -#endif - - // ================================================================ - // Methods specific to this subclass - // ================================================================ - - // ================================================================ - // Model constants specific to this subclass - // ================================================================ - - double MnV = userInputs.get_model_constant_double("MnV"); - double KnV = userInputs.get_model_constant_double("KnV"); - - // ================================================================ -}; diff --git a/applications/steadyStateAllenCahn/equations.cc b/applications/steadyStateAllenCahn/equations.cc deleted file mode 100644 index ca2122204..000000000 --- a/applications/steadyStateAllenCahn/equations.cc +++ /dev/null @@ -1,159 +0,0 @@ -// ================================================================================= -// Set the attributes of the primary field variables -// ================================================================================= -// This function sets attributes for each variable/equation in the app. The -// attributes are set via standardized function calls. The first parameter for -// each function call is the variable index (starting at zero). The first set of -// variable/equation attributes are the variable name (any string), the variable -// type (SCALAR/VECTOR), and the equation type (EXPLICIT_TIME_DEPENDENT/ -// TIME_INDEPENDENT/AUXILIARY). The next set of attributes describe the -// dependencies for the governing equation on the values and derivatives of the -// other variables for the value term and gradient term of the RHS and the LHS. -// The final pair of attributes determine whether a variable represents a field -// that can nucleate and whether the value of the field is needed for nucleation -// rate calculations. - -void -variableAttributeLoader::loadVariableAttributes() -{ - // Variable 0 - set_variable_name(0, "n"); - set_variable_type(0, SCALAR); - set_variable_equation_type(0, EXPLICIT_TIME_DEPENDENT); - - set_dependencies_value_term_RHS(0, "n"); - set_dependencies_gradient_term_RHS(0, "grad(n)"); - - // Variable 1 - set_variable_name(1, "psi"); - set_variable_type(1, SCALAR); - set_variable_equation_type(1, TIME_INDEPENDENT); - - set_dependencies_value_term_RHS(1, "n, psi"); - set_dependencies_gradient_term_RHS(1, "grad(psi)"); - set_dependencies_value_term_LHS(1, "n, psi, change(psi)"); - set_dependencies_gradient_term_LHS(1, "grad(change(psi))"); -} - -// ============================================================================================= -// explicitEquationRHS (needed only if one or more equation is explict time -// dependent) -// ============================================================================================= -// This function calculates the right-hand-side of the explicit time-dependent -// equations for each variable. It takes "variable_list" as an input, which is a -// list of the value and derivatives of each of the variables at a specific -// quadrature point. The (x,y,z) location of that quadrature point is given by -// "q_point_loc". The function outputs two terms to variable_list -- one -// proportional to the test function and one proportional to the gradient of the -// test function. The index for each variable in this list corresponds to the -// index given at the top of this file. - -template -void -customPDE::explicitEquationRHS( - [[maybe_unused]] variableContainer> &variable_list, - [[maybe_unused]] Point> q_point_loc) const -{ - // --- Getting the values and derivatives of the model variables --- - - // The order parameter and its derivatives - scalarvalueType n = variable_list.get_scalar_value(0); - scalargradType nx = variable_list.get_scalar_gradient(0); - - // --- Setting the expressions for the terms in the governing equations --- - - scalarvalueType fnV = (4.0 * n * (n - 1.0) * (n - 0.5)); - scalarvalueType eq_n = (n - constV(userInputs.dtValue * MnV) * fnV); - scalargradType eqx_n = (-constV(userInputs.dtValue * KnV * MnV) * nx); - - // --- Submitting the terms for the governing equations --- - - variable_list.set_scalar_value_term_RHS(0, eq_n); - variable_list.set_scalar_gradient_term_RHS(0, eqx_n); -} - -// ============================================================================================= -// nonExplicitEquationRHS (needed only if one or more equation is time -// independent or auxiliary) -// ============================================================================================= -// This function calculates the right-hand-side of all of the equations that are -// not explicit time-dependent equations. It takes "variable_list" as an input, -// which is a list of the value and derivatives of each of the variables at a -// specific quadrature point. The (x,y,z) location of that quadrature point is -// given by "q_point_loc". The function outputs two terms to variable_list -- -// one proportional to the test function and one proportional to the gradient of -// the test function. The index for each variable in this list corresponds to -// the index given at the top of this file. - -template -void -customPDE::nonExplicitEquationRHS( - [[maybe_unused]] variableContainer> &variable_list, - [[maybe_unused]] Point> q_point_loc) const -{ - // --- Getting the values and derivatives of the model variables --- - - scalarvalueType n = variable_list.get_scalar_value(0); - - scalarvalueType psi = variable_list.get_scalar_value(1); - scalargradType psix = variable_list.get_scalar_gradient(1); - - // --- Setting the expressions for the terms in the governing equations --- - - scalarvalueType W = constV(1.0); - scalarvalueType p = constV(1.5); - scalarvalueType epsilon = constV(2.0); - - scalarvalueType eq_psi = (W * (-psi * psi * psi + psi - 2.0 * p * psi * n * n)); - scalargradType eqx_psi = (-epsilon * epsilon * psix); - - // --- Submitting the terms for the governing equations --- - - variable_list.set_scalar_value_term_RHS(1, eq_psi); - variable_list.set_scalar_gradient_term_RHS(1, eqx_psi); -} - -// ============================================================================================= -// equationLHS (needed only if at least one equation is time independent) -// ============================================================================================= -// This function calculates the left-hand-side of time-independent equations. It -// takes "variable_list" as an input, which is a list of the value and -// derivatives of each of the variables at a specific quadrature point. The -// (x,y,z) location of that quadrature point is given by "q_point_loc". The -// function outputs two terms to variable_list -- one proportional to the test -// function and one proportional to the gradient of the test function -- for the -// left-hand-side of the equation. The index for each variable in this list -// corresponds to the index given at the top of this file. If there are multiple -// elliptic equations, conditional statements should be sed to ensure that the -// correct residual is being submitted. The index of the field being solved can -// be accessed by "this->currentFieldIndex". - -template -void -customPDE::equationLHS( - [[maybe_unused]] variableContainer> &variable_list, - [[maybe_unused]] Point> q_point_loc) const -{ - // --- Getting the values and derivatives of the model variables --- - - scalarvalueType n = variable_list.get_scalar_value(0); - - scalarvalueType psi = variable_list.get_scalar_value(1); - - scalarvalueType Dpsi = variable_list.get_change_in_scalar_value(1); - scalargradType Dpsix = variable_list.get_change_in_scalar_gradient(1); - - // --- Setting the expressions for the terms in the governing equations --- - - scalarvalueType W = constV(1.0); - scalarvalueType p = constV(1.5); - scalarvalueType epsilon = constV(2.0); - scalarvalueType eq_Dpsi = - (W * (3.0 * psi * psi * Dpsi - Dpsi + 2.0 * p * Dpsi * n * n)); - scalargradType eqx_Dpsi = (epsilon * epsilon * Dpsix); - - // --- Submitting the terms for the governing equations --- - - variable_list.set_scalar_value_term_LHS(1, eq_Dpsi); - variable_list.set_scalar_gradient_term_LHS(1, eqx_Dpsi); -} diff --git a/applications/steadyStateAllenCahn/formulation_allenCahn.pdf b/applications/steadyStateAllenCahn/formulation_allenCahn.pdf deleted file mode 100644 index aa82cf7b18805fd364841a8107ad799fe7d2e8a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105538 zcma&NW2`Vhw`O^4+qP}nwr$(CZQHhO<2|-*tH17^JDKEmGF`v+PU`ows%q^bRS*%Q zWu#+;B3)P+U58>OU?8wJvLfK&fuff&wKI3IAYf!?VJ7%r3yNOM(#FNqiGW_r#?Zx7 z#MIc{#1x8;56aoa$<)vm%473JQ__A*45jZ&{a%7_(d3m>Fu)8ni%3)po0DZSFwr8q z0xi6xxU9d=oO@_Dc$JhR0xjGu0K5_;^JVrW8SJynnI;3-|1TBIg zNmsVn{Ucl7zsJXy6N{Pjk-fQyQeW-FhwIbfg$f%w1a*2$gm5f`*qsqiEwV#s+ z0*fiia$HV;Wh^DgU3ETXA;b>K(k^yzYFW2Dg_&r9_Jl611?enX!qSia#3z&@-5~xD zSlsS{PESYIr;A_!)SSc^K^YQEx&VE}BzbhS8=fP3D7~I3CS!41f;GuS0<0=BD(QT7TVHmIyDOu+ ze$8d!rhRmmMvATGo_ootQ>Z$+KTETkb+j{Sf%50+2sfU57 zd{bx}T8Vlzh`Asl+Bd^d1>P;G^Nv6~$L$wne?CJw3&|@Fc_ElZI3TUPO2{_fv=v2oGi8Gt%pWO$_nC1^c>vEfgK zL8Q7!n_+;Vr7oY1T#;BM2L;!dL2_(ij+(Y1mAWnsCc?$OG00=a7(WzGaacow>`&mv zD3lVfjKN^WJhE1=qX;k;X8KM`_to>k)vclrcr8Tc07^i8!qEaf;#1-mA%VQXjWh+^ zgqELxWKs_B2<5T2~{q4=7KG$<>B-#1n<>{5aFicS*CnImy#(c4PEVDa9bAOP9 zP1IfW;>pH%4O@*|hk$`4P&^6eU<(RiBmO)<#*%S{8fQtaU%MI1se7zDRmS{mv^=y{ zf1)k#>$PKiG?&@kp?jxTZxeLFukP(R>+mP#-M6{NQq~D6frejTet7WTYEQcWJ}Y$%KdkLDzwvV zo_E`um;QPi_qDp$Vc93xUkw$}@pKbUR)_ig{*9>^i-oH|vi=q~zfSD%d3!2!;Jl0C zU*qZFlh6Ph0A3u70J1&eXN?KL!))ex9m)t`4z1lT=Yfe?SPF^LNd3?)`P%JIx6<3+`Th&*KT*^BwS7od! z_W6VT9OrD|E}d_zJT6y!9og^Ta{wL{7E;%`T$#GFEj+!UaoEJEck=PfiIc=@Nt{II zgKSsm%5Mknc;Q?_eE+1?_+*Gny1hXMp_y3l4s3)pyzpM$Jpz~q8#0EpG_VXaF~Du& z-m;ldH?wxGFQ`)5DQSBB>9@35g>PCbuR$#@tr?5ClWnz489}P;sL_A+y)mQ!)Y+xq z)&w9q$EnT3sM1C$x1vh@Je6$~#H|FRwweY`#G-$1Z?#wT*8>~1p-k;e{vWda zr}_^Sp%~fz4|rr`V)?(tW3Re&{1zL+|HLB&A!>R&CZ84xg%XPZ^s~Z%MSzL3!at|A z3UxOV?rgRj|2qZv@FvP}Y=T}4Ce9p8zo*&Y`LpJ1^d$yJonS?qK9e~IgE7K%t)`El z-Z=vL5|xbJ8D10B4|6?>=nbc3o?|VuaMwbdbw)S8mHJKR9yhBCz5_GoGI3WnwQ0i_McXw^43EwZLXS* zr=J7$+zit&?`mBH;W(^`v_mo)kVR4e4kJ`pi}!Ob5zB zt0sm~eXE%=%$EONqhD4m7KTjlV2_l$^%=6oV<)*<4;R`^*luuokXf7RDrn zJ~*E3witzF~dLg+oO!Hbm>#j-vLyQBi2Y`GNf_Y<>RUu3ILU)Z7Ju= zNK3bBNjLE{sFiJ^RXw3T^#}QctRI&A-fYl&kYo|S`BY{YTE#%BgPma-8;VIqMoAE% ze=0VdU$(D3wrh;u0toc?9xbd74|gH3_uEO!`bNW2bv;;H@9co;g`nsH?XE6v=cc(i z@V*0*JB~vhMlJihTgpZwg(S9eoeE`fo0}s9zg5?oAkE3BdoT@v_mD~g_WOlr$w``=E)5aQ|CLJPh(Kv?Dpt~kPA zm{w{WnL=4r73palQ7RM$1?;dAQQN&U_OL1?uz2%wrwL-qaHIMrBZ>pH_}G$UhzkUO zpOBI!MFtAP6MQ5?U?D~Kgu+ALj5{$b>8~1m`sHAjc1MMV1y>Owh4A|MVaU#brD3Oh z$-=~95 z;)7slk*P04tohzXb)Pwc9PAj0jx6p=?+2?BcFVxd7JHHhmtV5&O%)KP6<D2dcV^j@z!@4dhLkG@Hn zq~^Cx?|j!et@)YZ$+BYl3WMmDuu1|%48aBj2{4F7l@)ft-~fVz3Iqrep#5W(0OK4( ze{z5vF$NT@IFX5OaFC!NLB@^@B$QxbDYn@`VAwxL@kx_?BUVLJAB7bce950R#)3SneUTFrdRR;FndFfXzCF z5q*Q$egL3>y>eg>=)ga_x9(4KVva*~#+5O!i$f?;k3qy&0qzcFn2OpW!jOj%2!KL} zt$cwBW~|8Sa4&&_IR$H+{k7df0aQ?30u=EFcEJ`{sM{z(=)!|Jeo3f5n_zBp(-2ya zi$fq`gN16+ZemMvdw1cO&CAheT)-TDCe>UR!A{{HpWo((d(;3JFfE~51_A#Vyg7jG<=u5K%-+_p$N^EdkuAW6C=p;le!jnd z=7GqWv`L0GuJGUMwb9fVR+JSwrvJj9_B2IBOUM_*6-0n2C}_ckF4R;&C`gImo`2kn z`{VcFfAke`DZbxce~XK;hTtGmexpHe-+vh%-f7|T_Wm7!{(1+YA(dNVB%I+xX9SN3 zvUSkk|7}3@Oa1zP{%xH2w-5N+OOEbre4q!Mu^;{c3h3_7>GczGD0Uk=fGvs~+62AZ zpZl)sx2cJ6ZT-5-!2*wNhyWVKCwCEO$Uu-#{i*}SsReou*|_dwV2AgwJfE>S5a%2~ zWWXW8{(amJrUnZ9r4Db*k3qf#2p-*Dt3!o3ul0jd6Wb)T@!L`m(E)}ODJakb$N_bv zax8$yJXO=qJf%+r4hcb!fT;tGC_aO35-JAdvqOVL1BN1UgbVqP0sdXu9>obA(7a27 zb`1Le>;Hxe_8hVSP)3%>)*g&Q9fTdPN6lymst#@+=TN^ZzlZviDa6|8S56>#=<~ws z2;fqYxU}r$>Mojbb}-L+**34Piz2zU4YK>W7-pX4=uKSp8VEP+nk(#~4V{X^PR|5| zz4h_(xP4uq7>I0u>;J$rPs{E`36+C;VQl-UGdC4~knukssk$v!N4hjIA1w}whb^83 zhT3&D(=Lx+Zbmi+u}^r^-FhkU@ps^Gqjf$9zv|`i3%GkVUi86V7EL54KiYLJ1tU5~ z1A_xo{=^OecUiq=^?^Ma?b6Ery@0asHUb+1Xd;!D?wgRdofTWKnb|t>Z$)F}7JuO#z0rFk7Iq|9Qo2+noPQcq+Bh4!O_-CA=2Q`))2G4%&A5n|rUk$d-dyp-M-|BT=nR$H{u?SHuQuu6?2QFGLZBCaKZT zJ;hE4hn-!adbEO;r5sxthk4Q8U?Yjh+ItkUxh-?|nnXN)YOnB)G_jTSF-GP-8wo#j zqz$l2s!Ms8{`_(ST*82>^>~-D8$)nf%8MIeS(&(y&rl`dE6hSr0$*GprsqEq!==LY zn=Z=U2AuzZxFN;0s2LgicrNr11o$j|6ml$1O6pLq|ECZUyce3RLY6GcJxn4#w3%k< zay5#a7IxF8dxUsdYyN)I(s=Beb5AX3?L@oz8Ij!;$p+#m%ato#&$E4LTuVRi@nw&c{yITt(;_|f8^a!a;S^nxnL$q~;%4?(6fsF9=>no5Ejj*CG&)n_7-KA@>xnN&F z3p{bb^3(XI08vQI)8Cxa>I54`Z!C~Imq|;>sY1_gp1E{YBJp~1=g=ba?HOr~>}v?G zbuEKpnC*nm8FbPiI~Mr^tl{GeEtL>o(S%z6P(ILePzkZzSBJtgN!mKacXBzu`L){? zZ(ak4OnO=GDjWhVcxo<6Xs@h&0^GJn8~UCqJzX0kW@FoW77ndp62uHX!4)iByLo_wROg5B_pfl$96L8Ux>c+&`P z9pcAe)US2*W#c#oFobif*w9gzoE|*a+F%>OW>Atg33_*XoxXIt{X|EF^(plRAG9`y z8KuRbP8XkYmEEl*!z7g&)r=hJyvO-H+x#}ENsqlvr-rFVMjOCWaLk|Qg8{zp6IEed znL=9mkaHTLU(pJ_WT7xNS?Q>}iY-4DOJ4p|B^Xcy*b82-FTjx-1a6^k%Vh4(h2htu+kR}*=R#PpjwC|@c1)+tK9)#e@-uosj^ z35s=@x^HZX6s}Ga0_hesGdcb$? zS;ZO7ip01u+SW9!y%+Dq`Fbo$8m^v5KA6_3eV*Y>M_bu;(my;fn-5V}gizA*8{^28 z#tq|=#z^D!C2KN#=tHM(9@U1xSrtdRsqL$xN?J?X#9;jEj}Y(%((33g1?Hw?3oW%9 z>go1Wc1eNtqLwtLqb90;&Niu_Hh-J4L}NU zuXz1*`F9tsBKi#3Dl?Z!)Ggq6)4{K%L6K-E3pb5^Wf%UdNXCj@-y3viL2*4xy~HpFLy(3n?a z3Hwa6ryvZ7gV>L>=i)_jT@7hhC^4eGLQ$>T&D z&GDolCf*$Oe;C`JBVUr&hjKWEto>D>n=|nGg!WzbNlW)Rq_B9_E263gLhWSAZ%$)E zk+({z(l|3GWrVEd1V>Nw%Z$ob_iShL=)b>AMm3n9J)pi-X+2%oD}HWsVcXL6VUK5P zd&A{ShsR4<9x%B5fuZ}K&oGh#1JW%hTgZC zO+e&&9H~x#wL!u_mBpQt(5p%#H?o#=J6_^Vi0@H`Of5!b07qOs&Umcu+Al zp@5jKrEjZxTt#*yjG+5&grp<61COAil3E@a{Jd*=u8UJ%!_SIUK8pe@wa5r>7UK) zm6-P1vh>G!SR`Q-kPtHD;HAA69aMPrGniVtw7u(Xh%!n$bC}q+ic)&oYLNyv^)1@6 zH|H`n>ZXKliwWAy>jXwc-9zq`hdkDz%tYUF(?Ig%?hZxLi&MGXvtP#MD!DeNmG!ga z45%ovD$Yjktht2S>!f*-%UgEC*pah|VWFYMCHNf5BQLt&{jZ->ZDEU6Xs5;&9rsBo z=k^(-bFIupKozN<928n-#x11n=6kcJp-&KdEN}*0znU^dgG!}(!MR3S{&TGw6)fwu z(%eN2WNq`{*II^bh+~H%NHfzc(l_|Hw5;j%nnH#TrJ|%oW!D+-gB8d2vAM>)GmU+8 zclUTjcFd9OY+seMj^zzgBz;CvxH(w8TOSQ!uxWjYPOj&)a@f<3VpemQSoo+iF672t!((I)j_Rm z6_n4WvkQLb5j4_^OJbp^N-SE&>P$>_X2d`QJY?@O@76W#Mlj8kFbFN$-J zFhZiTSQqIS=Co(J`8aNmuuqgx*dDUuX$oZVH6HR+SRG1}oc#`)+iAFxD}#sC8tooA ziB~w0e{tge2T_e0hszjJgH)@POy9jCvF zU&vd2S73d2R*~0bty09UAMvxF@nvKj*%%^_M9({qO6!ev$FU+Tq$1RFb!ILZ3#P0l(v zX`r1_!zYx$nSE$gHY6^j*3Y|&4jDOmD$Pc^m6m=@FJkU?hjnlbmt(#F)M? zc2=4`9*ed7{~n;{otPc(IPpHF6UPsFf;so$?@bf4&6wpgC$iunlVdn1{v|ICbfe=q zQ!RUi6g76euxfTUwMLcQ19g_pW4>75M~*Hah7lJD#PPhLU5KXEKD>8!o-Yr{35FpG z4+f>H^|8{r6Z)OGlf;9_=!)HWw&YUC%Do4$n_f=EGGr@=m3*9v zruCvW9K;4f-P7iazvj%j%42*Z$4#d& zWdx6v?B?Sp^WsW)9Qa$f=~_0Vo5Wu7QX|~%qi1P_&9y{h5vpWn5h)oz(tC3}0clkY z<+M~mbgHJz8A4-v!loc(;{w_RRXkPvtU?||8AhbcP~W|&LI{4E%_+QQE8h5Y8*EXC z0etwrDD-{uq9Grc@I%xr5o3@-A5t#(a&RR#$?@BM2{q&>e*&LErL}g1E1YJAOlqe6 z0@QIUSpv6)xPdH+ujt{DgYzgdoP!XD`Zb8$dob5y^kYC|Q_z{mdqLT(8hO>c34|ReSBOSB>d0m^I8+Up!KJ`eOKw5XAM?#5)V?t;rtaE)XoB-8b}XYO3`2BFHqIIb05F82SkQ zcqf=B1Pp?V_ue{!ul;nhBEyk$W03=prZcC}EtXMj#~sxcFAVnPP33zV7Ih3RUadmf zZBDp#vodiqzS|TlLB1V3HtcIUR+-+TJ07Ev`XX)*Qdv4z)1N?B-ac&VPZK$N4O!>IAzbN+~_o^pJ?z6pq0U= zoS1J`tF@CSRr`e3Yep&`)me{;FaJ@daCRk%9e?SaoIrrR)!>#1+g4ot6JFuAch>K4 z14jij^P2U|i7&W7y-I%D;16!(&4)lA+0$01I*aBh!KU^gDC#-dTk)SSJ z(3V4d?I2L@@x^|K<~VU3_0Pj`fa%RADVamyH|Qd;pg z^4+d%)6n;&X4R4CA=rUzaIQ|Kn^xr+AhJwWckEZNd{&re5c6f7IZp*5A3|SQ_uJ}* zh14qk3bbbrHo~$J-(#WCl3{e%8keaEL7_8y>Z?&OlHMqvwb#2U4d~9WoE=$q3Fp#8 zNoV_JfT>rpZ#aZenC*DPhgQqo3jk}@0{PO`PWN$IObtE-JT7jJ?^fSzsb4T_sOMOe zTPGYH&#^6cmIR}lZDyyCdu7=BDcjmBe9zB!%Yy(o@UP(L8yA$kv_4!EMzm-(H;FBV zMvl!%UGhh`cOX)?HK_TNEi`3ydy`n>lQtQ}gBdg+46_?AM({a!9QDY2ID0QVLBmRW>a;j_ zP&j!Hcd0R%;3xGS8BGNc26Tt$+6H2cx14@l@+`+F&8tvF|7wX#2SX5p0EkC2AS;e}hM-xaPg_$yNFNRt@QmzbvpEAG&Hmhp;}nBm>{!C-@Du#8%)`)HIP%NkHrOPHqV z{8%cggT2k(ciePs^9pspZG71`!Ah`>QMnLa$;fe9l1YV=kylns0O=|{?p0mz4Dx{* z$OFWhmVjWp_{In+WfS-EZ~IKc3){#OWw>E*Arr&>T2Dh%S5uj3%S-rki9#sB6_jwpY3C?c~7#J{dhz9hcY4gq)aOZeFe%IdW>aGW$QuVKy`AJ4! zr(>Rp!D02R2yjKu<{o*KnAc_YXJ6Q3KV!{$vq6A2pVj@5lzQkGGKCgHeJfkpl9BNH8&t+kp}F6 z<2oGj!-|993uIq>Yi;~@G4j_wE0so*fYOyyF~2RZ;6p)+FoBV!ZY_wcvR7++<2p|+ zvn!6Z;SFwTeHQtrrZ7|Co15up8R>+K#FeA^K z@6>8f_)Ug#xQmC@+(())y!u1XM6(3MeW#Qnk&3_%cH8&#?!0)bJ69c%Z)U8{cCLPQ ztc^k9sbi5f96?l%CnkPC+R5(4_48{d(!WgfeP|jY5Sr%=3Ja*3E)B>edTKuL@C0`L zk+hT$9;O>Oj$@Bl($B#6tbLrkbOMW7F8@eP{2UlQdc(4R{LY{)yXaGOD7%}cyPF4s z3-BHPHOF8s#~-QB5&_w7=ae2sn#J_EFYa39{6i&S+z?yqz5HG|K}#ambnV3e$Y+!ZW|Aoi}{j`GRO!^3S^f^83DnLd)u{SkS9|j zIMr|4@G3_V@n6JDT9+oB$tt|%(%Z?i<@;3Ku8254j!?aP_!__w#=*U6L0u78PX}8d zN7bbdIuG2+%OkOOc`l7Je}`UkjoHmdjOT3SsP$L+(d}AfNc@d$B;WD3jQ#^XD{ z$OgGN#l|0gjW0Vo^3|tN*gIR7{CQ;^Tw^A1K2&ac7VO^>5EBcrc|IZeC!u|(*Ek9; zT5}Iz8Cbbue@8d*ZubLkHmh0q-@O?#wZl_x0C$t6Ky5bj{^`*ZhWgUZJw0IV#vzW`L<(K}=1K9Zn#iBq_OMH#~(1^c#;8D+dkZ+|U#X^*b$u1O~>%H(3%8Cm$x&rV!AB3^MS6H84p%F-bl# z2)KW^kMJH}NGpRt0P4~P1emf8@Ytr%0F0GeQk#oCGc~mIaFO%p1HzEO2*d#j@~-jg z0v@pyV5nv$Kp_BmZUNcm$+ZXr0a&q>r5T93^Ggj9oKRX^oJ+vn9UTpgy)YIyi)KbR zGy&w$=+pvI5r{j$V9o$>FFpxiS^)cgx3s=+4uF-W2Io(?Vmphg8^FM@FA31d1T2i3 zr;}4azyNda!X=<9hj>2+2lF$n@jwrZHn2Af=+NZ&i+pQ;#}A|__~!zamASFG4p?ZX zrT`t#i3$SaL0&v@dVV-_vKVu*hZ%i|Ci8- ziemCBj!8hy?Iv51+Ka3qcWIwZj<{)`3A&CrFg!RoI8F@!umwC&XO?#Dk5h192L7u& z`4RqJ2}Tdkt<4?qp^RxjPwjlajL!lOUcij858({t?fI?!uop5m2??N?$q6Jgh^D5{ zvbUH&V(`@ee(`IlRtMl4SN?DW;_&_OG*3QU4hg&=L}=GP``2USrt2wcO6qyqFa0Y{ zNoaTlb#HLu32Sh2cmU$y)Q1Le|KI@7^UFQQkNYnF;xDBdpyqEr{=i*?v$BmwaIcOi zzw;$eIOi`9HoRv&4Do)4oMM}QiV0)z&if07!-Hcc-_P-vpS~}j{@1_pM?CfC`u)dF zj7bi0EYCZv5B7)8yD$cI_}V_Y%)`yecN3O$vm7Syx2A&qy(T2RE+p_*o$L(4XB)w> z0`w@4U5jHirnV zgK7@izz$mY>qyMg6X5#LKjN2&51{+l{t&!D`bXFY2f!_J?-^@=?kzj7h~m4foI>gk z;V(IV%Ki|jq59`P{bhe7_CVc3wg=#~R{sTM*(*QEy~w~G34j6nSNQKa5%;Zan%c*duvDfeE3P0rJtPWdmJL~N&Ps?W&BKFDV(M{_`=1-G? z`%RT@ud#NOe>ilwzfQY!1FZ-8)O{eaE-?!U)E{KgZL|D@fn;qWrUs=#-i@Swef}6l z(K}ryF7=^d&RP>ZzVdq;1f#MgR z2KRrrkuzk`rhi1mwwV73t+Lgt@UXD)jW`Z(%r{|tJr!|i$-D&19T|X+@G_%@)Kg>C zA3WwQccjY-wz`_*P5cUPx{z-GSk$u~7e=j1NU7tPm>zHjQ#}5+ldv;l-{V}u*~<&G zoBYh`7|&^mWx{k~GFcN;T+(o7_4H{TFi zzo3Pg*2)ZuwM>%Aj2OaIe0d3ZiX3;kRB=N`u2w9+sEr>u^;c^)a314sc$xNR*91kMMnIaoL&RWcV?~;vLnw#-47FOYzO?jXl2`?{86t+CGk+wiWeWP!%?-LlC zpwxq)-a^U;Z|!glbj=bRu#&gaC=5%6kxtE#5VU^xo%r1f=xO3`MN8A0^?L~WePB$m z3-mV1pCqoCeh`D*#}3-madJyv7gKUH$FXS zsrXi+#$p~*EpI`>#kw}2BZ~4ux-ISD3#LDl*Bw7razh)+)mHpYc7_{Ne0RM8IHi&J z(#bYF6tn}f(?TO!Orz$THQsvaaEY(?TJHr~_?SevM8eq+?n8x@3{`_mwOaq5P$zHv zQ#!qm4;sLp#^lFwAB!uI{jIQAY^tq!q zf%q%7XLVzBzCXaxFP_c%gbNyQmff$#u_xn34Ih-g(!qCeeZE@0fK=L_H6-E4on~{S zql0VequS9lhsg7~8kL!y)t2gyqGZ@lNuicggGNv?oAX*F!&EqkvEUjf{bO&1*-9~| zVaLBqz@qsmnqeekD!vi7XpX9UG*g<5TQP0|?>V~^)#u!QbbCt2>Zd8T#~UktYKB~z z+}lCl*~p$|z}PK{Qcj*r+ImTYa@I=U6`I)mfL11^FaeP(CgHzp$OCnx_0i!RZJ7!8 zQk~7}n+$DGIVQhUmn6y^<-zamCBV+1dZ*1ya#a0I6G8Ep3s*gPvi4aL_{KVA2EtJ> zTENxFR72Juh}H7JufmgTj{u=o0Uv8M3hZPr)*dwV(G1j@w0h_UygUzFwX&)W%?NSb zd6&?{qnWsHC%mj*E6`P77Hfxuv4%*L zMEccU-W;HeMGb`TTk{;bZq+WMx44m;0ZG7~e{;Lv#Dl#NF^h&L#EYn7Jx+WENtDhN zo45;ZAr@^KPO0OkKxAeyP^Tu=#Koh``e#ndG^0lpoejZ`ZymoyvZN3bP z`+ljtVX6^s)*}JK;0)lYeoM?p-4}t|&cq zpHJ3ke$xDF0TbCn-6PGcRzoj!$6`cPf_t14uA_Kjp^bYeYGr2hR|q;;m|E1{Tplgl_qiK4!KUhfe$SKy==cQM%7qe*9-_ls#Ao_ z5t>Eh^ZKBNaUGvU@wG%QH#N(la++qmO1DX%S+#tB17>o$V}@3>THuJ!+L7%9o9egt zs-s}sqF4cEdwtDpR-kX}f1SIj^KkY~oJb#@TT>+CF`4cv7CXc4>jje~Nl&jJMh~_d z=6{TG{yuN9Ay-I7te9EJ7`=}$obXKb5$eW5IU?q8G20Mx`|!Z4eSYur1utblHohGN z)Qy>8HmV&M4^`NR^*i(OH&H}(9c=X#^lZr0x^vh8cuk!T6VQUx5&5^!lyF} zcU@zDqPfCHHMpX6^=Sj}hj$~34a=^aF(sw^MR4-rp;ZFM;7OMgD7$wLI|asM=QR z6$y5)cCu73F)-rd>m2q9M7BM}L4-B@n|ZB7AVo2YrZ0qSZttI0pFXpl_9LlS`0;;e#*;wQytu8CPSW=~wNqllQ3$7O_xr zOT(6F{Zc$&9w2f#BK`K-S?3b!;_-oI9Ye z^$0PwxtTJXGb?~vjdVR5ma_ZI0nq;8ex_}jP1ZUzn>~N*sNIyV_4X8gvL7mg6i9_q3cb*{F#Deuj`>K#bzx%N*~%H~C2r`P@0ssZ_MgFFMV?<%{T2V5iFCT908(g{yiNn)~J34J6*s!JPF2TK6Sb5Uk6c0*2zxC zUonp1iPWry45YW*v{QuSH?N_i1B{nC6Z7JpIf1bcohN~8px#+@rx3BTs1kcc=2&Np z=e#v;e0e0_EQd%gy15A~B2Cxpu$>kW@n3;S4mt4J<-Ej?=Q!Lr0Z8)E+8Ofz1F!L~ z^t_+7;UZ8e>dqVj{>}N!Bw;K|nL5Bx-mvyj?#LMP6t&Fz`?zf{%SbJU)9pt`jv%)Y%_CWXeMaF&;9VKNQ@~b%Src{ z`jlbbHu2wWUv&Wo=MJx*pJ3RT4<6YQnkX=35<2MBm9>`^&*k@~kEaA9bzyh1E^SGN zhw*@^W=6bgNLEHS_$Oc0$$UN1fHUwiaj=j?_{d=*rP?b)|XWX7{u#8axywwLfe zTPfukv1gh|4e_3_>*!6qG-qPqao}r1Q`uRR` zKfMm6o146{b3=MNfO0lV$?12&1zk;DJ;#mM?_NbQcOQKmQCc4v`VZ+b$ymobM^Ii6 z$02M~xDpG06HinkdoV=%z*u$N59&EwY_a&23P6e47=2+E4>vssZ6XT!PvBI?)2gU* zBF;oMv)n|^bebGdcb`tr>W}YTy%D4vW!~>9Rle>!kNoC`xa^{P>Or6Ci^n51J!6s{ zE zk#>ts*{3#3nU$;Wp!LGq6$qI?Z1T#@pb!x6!<6YMjkz(bOK(b?R}2*TxQv8>Pbsl_ zs2r1?dHUc?{Buqyt4hVtMZ@C(5vz)FQ&L=>)2zC4dy3Nj-7ke0{G2=JX_2=`m!&g9 zc?;!mPA3Eb!#h3V@|u&?JK#$M~1U^~>IR%Zx@aCCvbaUhH2Z8Fsf+ z7V_!W)@GgH`9u20J{T%;@N=C8iNGt*uv*UoUW=rug6cWZHOIyC%LjZEUJsM1DBcx$x zIiQAyJFvTerKOE&9hF;r&=+^GDPDvRACHT(tfklQTFuUrtD519>8Kq98Bnm&B>TD^ zuf2;q5u)_=!7bAsGpNl7dOn+T=mNv#=7^91*U4v>8(Yz;SqPzt2oio3JVt|uq`LP! zt0X(MOJ|qVj~!MRyPK~Z%yne&{#bSrUeSKs!=8^xE*EABGv(^6P%1V!ar_w4PsR>2 z@^j{8{tu)C;(}xal~Q!tTtfK^yx{ zKhJ5WLGPAAbnNEx>y z2WM0#_fs=mUHZr+XcZ3SKPFjR^)%u_p2nxUt+(G@n%V#GPCkuV1e{QT<4@?c9X-Gs zl;-|3YTMcG&irRp^DDti?=)>@=p;xsNZlRmw%1Rec>h?3U*e3SEbV}|T0wjR`gXEx zsIb7MfnC4h!Hx{1NIP`aE8f;b3-cVEj93*%=*^q!R33ic&{HTQ-cl50bIc^wgmYgw zO?;E;q8VZk*UA9EeLWtXUwMoas(*RH^Mt&>)N78mL^XpNRa2w;1h^=Ei_6vu3-DaI z#{RUr%NG96!m6|8gYPA~;j~@<6&DG82<`S6s!b|-0|6GF3ntPzq~a2S7Bd`BH_!6) z(;hOKPkV`^lBT;L5+PXMwx=y|G8}c;`KCM8WGVOC zp^5pEBl%t9loiy@sP8}j(KRtR@b?w{0`6NbJhM+mq3uoQPd4HgEqh5Riz=+xdYTy6 zeGyYpsuoADUO?!ZB(%91jE!x3A;P9jRhrd7_$$N_d~4JjRm2IgcJv(VdgNDUTC2j& z=m|AB>JC_0x?=bfv2U#?e=zn#a7R+A$W|J?x)jBIX(qxN?s&7DLO-jn**yBxjy!pC z4xvp0tu*Zo&GygL4cNYB+xN}Fuv)}h*g^&?#WMsNO@}r9*haoZIDA1bU|OQn6*ousvl>wlUUo8H z&#u4XF*MizAB??2kSI)`F4?wi+kM)$ZQHhO+qP}nwr$&` zqS81V(n1zChD7saO5byH4uRo%Wy$RH9R6{kdsJ)7)|E_}N$&+Qy6cG}71FHgs~A*; zl(^vsh^9Hy1I@f$S0M$UZU0vN{+suh>o&9OUATjtwlwe0di<-rl_Vheb+wqzf3ur^{?1c%d z)g-zr``9U(={O5FgTkUB%EDAb6}ib^+d(|>Y%%y=iL{Lnzl=F23;OxRR`J?+90}lr zZ6YdEve3{$;xumUXVsa60@3 zd;`Z&iz^dufuc?MtuELjq?}Vg;Zr{u&zrv%H-C(nyb?o>P{jIm;gt&y)9xL3b|Rgxc8 z$l$H4*XCh2&mT)gnQnn6+GGcpB5aHC-XNU>h{0Cb$i^uYse3SkN=z@V_MWs*-a&cf z{nK#d9>)|0yCVDAcj{5PZkOYjll59L5s>^cvBA%JJL5sqwE>+4XAWGABOO1bhdJ5s}=Zae3uJ4!^UnP&F}}%MR0pKL!f{^8;j5Xi6rX zcpv0}c`Z~vTY2|m%=*H6gDBUh0Jz}Pt!9%a?yhq@4ir5T7eR+Dbm_@`RPtV8J09^+ zVzQ7*gN;L)5ST3)s2uUaXeoOI1H6c`_`>~8pH7I|k+T@D@{U*0o0&Xl z4M^hhJ~1Ptm#A|z$+qCz5MtUa`EvY#mq<$)8m3Rq2v^C{X;Hzsryj8iR=wc5+#j9Z znk_j9gic1Gy+#az0<%NC>dU5|9$yr}Q`U@UP^=hX>_CpV@wK*v;`^p5kOR@6>-bi! z9(T}GV-*fC8%V*(Ykd+bUgvFEvzG~yqqk?mjT}+ek6we09r3DKjnoc)zX&q5SBi8! zZnk@h-A}v$eaJmAI93LgJ4#_i+9+Amm5WvVkD9bBw_PvB(ZP@t4`xkkXUHPtGCPtP z-Ju>YK|uCi8!I^m3_P0FQOR{Vlknrytsr!$BZk6iQ2nB?noSp>vEBzS`gs!h1AR-m zE2SCh5Z~{}Ze5AlrCi^waKz9)4*)QTL>{lqlm;s9iwq;K#qVx7t%#0MvthWRxn;DU z7`=!)i+O^+BK$h=s1BxrgX5YqOY>GE>!NQ+WAd_Rna!JJ>uXG2LnyxcFHZ7Hfs;Fj zVrQ3@elq)v^pQ}WBMIEWdqoLnCdxAq)#SQ&3$bg2sUf{P&05_2ylDs(Iapall~ty0 z^-K$I1Xq8wiXmaH$YOu&{MZ~WF4_OkZeC8GGMnJj{$j1z&0!sI>$zk$EJLIqHmQnNT) zIC{X*b?|InT!V9o|4!B|Mpjl2q!|CLRC2RpPrgMStkyUF;~3?sx0YNi?@8LdBKUQDWE z{x&RJahcf5+&0=&{lF9zIqd$5@rC)8MawZ+>m~qken1vQIFRiHeV+fOR3D1k^2xKJNmFPuU9(DjB5^4oXzoZ_!Tgz7e z7t-Tqd~B0oMaE;%q{i%oZ?8;J#x!-Fc0gx9oLWVQMw33Sqz1t}qo&VRa7yNrtkfxd z9j`|dFuGNBLYH0V{_2pbL5L}a#Jqn?)JKWeb9gDqU)$@(+WCPGl&0^cC! z4G}n;GlI0bB^vi2g_B1m#+1+*FicoCss{L2g;s_9AHU6+Ffjk(s$&}r|)f$jM4buSqjT$Uf6~+r#TK46)RVDcUa~@6+ziy z7>JTjv9hWeCT?z$l-M=yNlH=_gxmD&Tdq(JfSQp7JqOVdypK;6*6_~(!+Cv%i-k|= zrO6Bw1t&L=>mUZ)xv=U$#A#h~Ygkvh#8SMsH<7o-X!8!k0>sVP{23HrLav`O&g!e; zh4g}8KfC^Q)bMo}h9l_Vmd3jIF>w7VmmlX4OsmzkVzu|_yGTkIf{N5~)9u1;8CR}2 zHTO@SRmS`LLpad}B2Z`%sn>0PZHKVVrpTucFqS^L!eFVy^3`?xWL92gDS)}-kOX+i zej`H=YZO2Tm+y%yaP%}lw}!o4U}24iKHbna3mwvZNe}4U_FQ<1flS^zr~+qRp1fB| zUQj8^+wt&Oq=>?|tIAs26*eB)_yiwZg(z^gczE!tjk0zyT!c?n+vk(1a|)i>ZQ4iM z7|4S+QOgpMI2zXoxEK+qYR+EefpU)3mUDi(dUhOeVwOcn3T>hQZnc0(B;{p_Td6g@ zwy&(OxVceT>?q69fbd=&@)m;xYaw8D)+vh#zMU9CoE8!9piubHeW4A^WTNohKIF|p zYN6hf4`D$>S~f9{tZEZ?%N_q1Xy|n>azn-t`$I=AJ;tMsHwz5k2IP)gjW}=jN+-=j zK5W`sgw&sO(#wNtGty)3I@+Tv-vJhGtjjxZF)-|Esg5~beV)@fCb@d}U!*@P_msz& zg7pr9OjH1?HpCASIX7vzTm zki4{RA8k|Jl`ZrF?Vx`ok45DpcCOVjkG8noo_@5o&2h;GF2j8lg*_en?ZHTvMsjda zl}HTn-a!=Xwyvb?YnGYOodjITepk^B3GYfNd;Y}!dt12tm@8{6_G0IeN~mZe+L=ht z35-6|KZ3#OmT+!35mh{dlIr1pSJa4Qb_KQH046)q`F$yvna-QFa`ewo?~q|N!Z)5AjZ0p|Xmmq(`o&w1>k z@L{hh*0SnrF1K2W_*YvB=Yc~miimFxLvUQXiyMb)xPvJ3nx6Jpu8K!zAJ}S1Qqx_U zVK9_8*?+!}&<9`@(vbs>IQP%D0n&rJsPtK!P9E7n0N^##{r}h=K16*6!`H!7zup#D zLS?sg9ys!%M&tNVRVT4>AjgjR z@&7o*_Sar2qt3o4ajyh@F})dRddpR;i~fN?%0kvE(~l-5;AJG^i0HiZ1A>ySgw;!v zpW5o3RUhYcPlQDub|5+pMtRedK2=RS#@rj-(D=TuZkjGyQpU$ajGCMoO~OuC(z?|u zG{6iw8c1iRi2z8{oe`1| z_<)^lhNCY_jBs*bK_c%ueRk(W7~Zh5c=(Qs_K_c`6umrXhDK?Y{Ri4&P4QeV8-;ll z$u^yMg1FhI$YZJtG6s;8zk_IG7t z=uwSDOQ`B`Xk$#_6%_Rl+S(;EpV+IotKw}?aEpf9T8D_>?~kuJnz!}rh8>W48dI=a zKy+GZ9MxBJn{YLp{483OO_-6pwqJ*~o8N8*`Ib&O@n?B^xnlHGf(`gSDBobdgNAS4 z*{4|xDvUz6XwJTAdvTR%WHOCg*R>hDULQHyjvl9qWZd{?f7p9A1v9f&Mk0oULBWrW z#6z@JpB-W)?f665H*=$1NF0CD)>ATM#75nF)q4~6xdfg#rYqWOZYddpE!3z! z9+FH^iajmNHYX<$_q>|7bZ8r2Be^InvqcaMuK#q<;GORYH?+>#dqSf58B8U0h|06- z9?JtJ>fUx>{&NH6)0_NV|LY0J+i9V1H^5AIm}9tw$w?(p)AK3DNFX;_tjV97#jSUa zP|1X#7|#tux*v_8{Ufiz3DJrLH?|xu9CFQNJxKDZk#n)2TrmnVN$hrPT)pRrVX}7| zmB8>tmc8eWD*MzWOy7IchL3F|l7p0&!h34`Rymfv#w7OMtto8nPi?%};^iibHW!K5brPd`Z_`tV3(eqvd= zLqZ2FJZl1c4SKti{N7`PD95yMa)+t3EqQn&&_jFGXhNo!7UXHj`jz9g740zFlUWnof zY)4#fkFnJ8$`XVq;(4w2#q=;SD2q4al?Y#4d}@EaWD~hta8?$ESZC8UApfx1xMG(D z+-GENM*WnZjEv(`)M*ZD?2CIK?d?I%x%(o+FU*DSoB_X_$gUb{^-4E$9U1dpY9Ov2 zYhFRhtJUasjkOz#c;-sLQtc3`I<3>#kOcOpVm*c1>iiyG!h8- zHo?s$dBDiN4HuP$Q1jAwTZ{`rZE7oifj^Eo?DO;oX=hu_rLM^>k~m|{xtZ_F#2FPI z=x+TqUMO!@cBh?%uIb^!Jp&?>VAvUJYaO40%0s0bzWoUz&(CN{PD!XCsMB{N@EA7r zIHbP~n@VoB;ywfRtv&BTP!L9< zkqGXdDbPaH(T&#=i{`O3jnC0EsMp`4M@d$IT&y6{%~6@&@H*k--U)*fKAwf{ivB{K zLl(|;`OTm&SzyT|!sRjo--YT(Z$`9flyvGMH_DGk5_V;Ptx#`9j6h03_fEiM>|(y? zke&|z4>VgTPuv7BTE0@tuJm9nc|p!&NCrGp`YVSgE>*-t`7YC;$G|fgt!u!&T!0E8 z9tNhn_K#vhfme1^rLa+f;Vvlw&n6n)4`LT&L*_A=1eTpKva;hpm11XCF1yHB4nI;F zO9gm+z765{vN^UkGZ*A-$kHg(Y;EOL2^YrXhnCVKsOnlPsTJu&)vg{NxPnQtA!2+b zn_EbJHm$`xaqt&TV^60B|GSA<9WBhkl|t(2Z!Lrwn$((wx}t+T()o{rI1XX%s`;}w z$x}|F49iiooZeNSw_3d|wQ$GPWWLo*x$V*psAA zalbqxH)K76Bd09nb9l2odH}UZ_Y+UP#LSaj^rVsR44J?;qVq?MKC^zWkxP7$>4>87mE63xZ$!>%?= zA+ekY%FFygp>`U~+I5}hOFV&ACDawBp)-C&4T*FaHK4ZP{o$z&y9sjb`6Qat=UlTT2W1gtBG+XWj%RVwBw7^B6wwtyIq5GrEVTuhQe6=m4U6x z6H7&YcNL&E6cXZLTw~AHPuhj2lx(C2VDu#KA#~~Z!0hm3M8jeZua-U~R2S@8O!(ZD zNtxUr19UMgtB0t6UvUxv!$-`h(ZrF+txAdrq}IdjS3uJSdU0`Gt8*FnWYO|0k%OFk zN{4=LsZWLzdsfNgk;Re}hTfDeakZ!WYA(fB$@fj-vVon*YD~?(wO7NN)nEr_GhHAE zd@9tzd!7vtkZ!oW^0Lmpprc7iCxGThW%`C?0)t+VYBI0Zn7aA+WyPSSrAC*S@`_9h z`FmEX=XpFjdDZ@vJn|qG@0_9X^W(PLBIe@Tc97*!(Y+zrD1OFSj?A0C@Buym=tg*_Iy=zl*v!G z>JCa_;UpWoiWj9A1<8rIZhhYPnNEW->=7e_i-hml+fl$tO<`KZl%W>f3Yf$(8N6L{ zXZ!i}|;C;mF&W^MWzFjlG6$r~nI0~EC zi%SDanxkz@g7Qp=*3jpRlTATC=y0nU zH>c0h?Feu--(rFAl=E;8qcH#+i%(r8vF!+(nl4Cx{dMX3guT#p43GxE-e|)878qa@ zPcP8q;Fox5uO6_m!VflU|$2|7 zUC7OhQ<)Q}K;kQT7l?vg*Q_;XE2_85rBgGenK;7!%xxE`FE;xbwrov=B>q}6>iJS0 z3^lz%d(hSJ97AwQ`Ufn!qnn=M`MG}?!&_uEJrcm#g6-;Byw1+3LXVqZ6k0i$U^*Vr z@=S^i#H!ox?8HnSwU0aW?jfNwZ)6>fP}M+_iex=WtbWubu*5~$yhvQ|JTZsp-Cu_G z4{L>TLJ1(Z2o}a_BCJoKxosaRp@6|mFeg89Z07d2MxcRMZkp?1HhrnIp&7EzUtB_T zHM0C~xqjG(A?LarK*yCKSdMm>Y)mRi@be^Oo)QVcWhju+h7==RqdtNGRGE8oRXXHvDEPa_=m(t*ad2^cm8;ZnUv zBfeuOQ)(xR0#w3yO$vA8e+qSvn(3fNmR)vY9ZJVzv*s0HbR?ZN(^m7TxJjpeR$;dW zQx}5Acg$=T&^YqAq_0X6O(9GAwriY}qS@GOOqe1_D#(x}VsYp=uX+V_9v?~4H@Q3M z<(7~dM?Bi36+BzLRXl{85tE<#Ig;0YrN3Uq0__3yaBd*MB8I=!0eymhO^QnzuSqLj zWqn*~GDa9vA$A7UB*u5KOY}GzP!T zx(|D61$))gPU-Y>vCG6Me(-tR@D=|T+SC8P0RCStkcEZy|I?mWSs4G{)Bm)d*jWB= z>51Tf&w5JM!e)gLPjeQBCD37V7H@NIV}JpMVFVtU-@zp+VGbl9t#SS@_D4`r9Ne5A zNc0keH}}hbEM^Vaj`GNwB;P-#b!f9_u&R!O)|0T@ppkCk6tWC;fZ zNKp>y~Um6!9)G_GShWwZzgs4X!qW$@gAvr;w0m?=RuxMTw7X-(CZwnRx3DAGI zL;z`#pMW0&BKb2boL>@Hxu2H-+&`9JpBD)3h3Hsb)cu{B{zmN+BGRXe`0GDAB^D=f95y%x7gOGrMV)754u>FpsNFHxdP_VbRH&EY=UI1iK zA~x*5TCxxaFie52d@=ko;Jws8e)Ma&A7YvKcwqf&n5R!@20`{h?*VZN02})tfqZ-V z<|wvpz(|mMH*gFKOWIg}ZSMV=?16zGB=7YC|0RR>eU;vDo`#4^D2&B`1 zN2KS#j-N$}XKEPEnM!+bli)5cl-Nh2Zx>!v3?wLlvmL#2IR~8s2tD`xJ!&zG?SY3h z7;rmyLS**oCG5(I$FLw)#NV}35D~y(f5kzh!$W{_a)3*42ei+YfQCNsXEumW6HzM& zxMzNM0Gx$?`2!4M6rUm(=b*0vK=R^t=Jxx4K!4hZf&2jA7$BhaVVnc|!GAHatU|bd znnhP}!5@It{^zg2fc|~Cf8HDUT+@JnZcl&oKW-5r&o9r>(Jddp;=l0a#liQ$AW#rd zKp?>-!vO&C<>?gsf`S+b-*fzb5(9gWep)XB^?YMrdGVR{Vj%pN^r+|0KQ+T=a#r?# z8Q6IJd~Wk1`Pf)c`@eR7TEHXz2+#26e;!c2UEhB!e{~dpYrlVQ5zE~>+rCHJeu%$( z?CZFvr+;Aqw&r#yp6t#D=ZFD+S(acwR)sG4a13^DenpuS44&dB2eP(*5+u`7u&3ZI z^I-)9vwklNdoKK8Zb1VDpAhuxbzI;C06;*0Aq8V_hmpN%-SaD-umTH8FLSgi2MEDK zbq~mB$l(47;`Mxlo$u!<7z7Bxxk}*Wdv~v35Rik26wS~8wDcJJ;rvLym6YP@7zD;~ zAVT@G6zO5Wo{HP~vE_Q%eD&jf`+ZcOdfLx^_I7c898o{O-(^)O2n4~loaM+!*QWqa zkM_V{e{tjhJEp!A&D!+qchk zD-T7o2?J{SR)Vj%W2qW&as2y4jZ0tTl)7YdQQhGx#~FsF;`kejp;T`bgI=js{XeT@ z-RrGlU^nOjX|3?EWv!c#=wue5yQ#O-tZ@Gj8K5wzt-*CXz%oL+b}dJ)d*>96FK8ty z^#nhL-1v9u9O@s3veG+fgKp3dHHFhsmVhS6Bvubjm~cj3KboAa+bICaymcdu`nH(L z%*GyyIyU(abx@vK@J`>$PoYu2+Qo(smPLFIFi>vM6WyOLD5enx6tt zO{nF})Rk~}Y?n`JW}}A`YIi-f4VgWMKLO^`9H<90OAt$@fk{CajIxhoD1rXeb;!Oi z(Dw#?LYFK}aKUN0N3|HUSJ6fTu6b8TZi)Tjv{e`*SYP5-3=MlB5UU0n&&iP_h=M+t z7qfReM_47ZK;8!DU5iWVEs_!U((eIr?~2U=D#L{EiEXAU%ey!kT9a9GE^9YYpbq`R|{ z1s@Gvx~Df=>W69&#`4}oie5?4XMuhGEj#z7d_(*^JdkSHiocL&KlAL7^RD2BnHknq z2+Vw~0e@v;U<}{B&FI`Av>TSm&)mXA29&EnB_64shgOeHBjDL$!?(lpP07oBiB|71 zbuBXK5fPW?KR`6O1BDO%@E>V$bNAKWpQDj{aio#GEE|l@*+wG$r5(HkaZ|hQX39;V zGL_wDBY@+$m)%#_D7(f=apKwhptlS%JJelI*}$J$Hy)IJGx7B){S$TVRG*QzVxDHs z6um0$T9-L3FUgTk!ITO5`BK+{Oj5vbxU9$mVt>16nyceJ4z(#Fm^A)k6k?>0zSUA zcH2$;tmR5MBfkHQnp}79W&9*!?-1z zGLCPAjc|hJwOclfS2M*;OLA~Ly~re01#j~uix0%+Hq*H6Kri6$^1(@(lbLY5<1y8C zq!U8WgOR(h{+(B+Nntp9@&rGnk#ieAq529Xt8fyUlKo5F#8iF~B$zEn%&O2&V2=dt z{kV{k*T)Pdon6=?*FaJCT4=L7Dnh6BYs@y6cwqHaPSbfRPlaC6w487|F67hfdrcL) zT(in%?dp+Lp8;fjE4@#rgX1yvH`16$LzjreErPE(#t+Sn+XXQT>rI;f>1U$w=RBeG zkuRy7_|d1-8M}O?((im)>1{9yQCah48&dCowAEigLQItQkZo_>I;1`>depyQkloN{ zae`g#I9f%$>6pXl9(^C5P@k}P2r$x0##5=#U{PS!NDE(WTq+Yye|wl6BreAp+UT&g za^Cblg^#>6quJx3=7$yyG;$*KuE6bIdnkBY?MvHg?tY*w&v6=S`u0^;Wfsi-3Oo^P zU7B9rIAkq5aM6dYvOf;UlYj$mWXp{PF)(bo};ry2VWkT8r_L(yJi$a9t}uEl?=!#86kml(#mNc ze4A^uWILe)KnlIPKO%3gBu!jxa5`05x-UaB_llV?)?K^7S-#hZD5dl{8PT7<9(_ZB zO-P`y6#i3dN3|h~GkNaGandDeGPFDymh`&1@4mc#2UOEvEa8p2$SRFDB>mM!m|qN? zcqj5u)kue;BCfiZH3a>A3Sl=u@Hx1kc|z)=@^DvpnuF+FaE(RRvyn&REi_j+w)-67PL|In*?|z(3OvqusNOBEH zzgZp?8gwwd88xq+@BSQ%&lSUGzv#^lC=TWK87Gld>i}rb>b&{Q_SuL4D#+;P6Hn^ z%YE<8l;OJ&x{p~?b?wMDff7`*U=72xBIF&fZQi?dkVbvaLR52|dU&_kk-uG9&XyK+ z9d>z^;968oPq=ud!HGu^w^L3E$+r{wN&s{15ukdfxMIbJW$`Lodw3_cskh~@D%vu3 zBrHtWx8F)PC)SIR@H}wn6NkHxJP4e5;I|rfzH3L@>YG1X#kNXk8FQvYfpKNnaLoL~ zj^30BY01)7dyGtq*5`!$;shTZ*CX2mV&}9m3l@*_MNJ&LcNqV!V`+yAEl~$K^}m?Y z?lwpo@Vqt54USy~TTNA=(+PJ6X1i~n@_@N6@G5wBk?^Gy905uPH(%mh0z2i)CbM@r zTf0i%AY<>zQG=FsOh%@FW@yu~jx?g9YZf}N@1@5oqkfr4U6B`$IX|2B3oUtbb=N>TUmP7OZlprGuojiv;5sA-&|jyE?M*5zkQ92$F1t#4qm#uCatkF% z(>zQ&31$Idw>^7bj@ZH`zEQo0@ybQV1FbhV$nEOS%JuO6MP8sIA%{O?r08E;^pEpM zMJowM5={E4Pc+=jHV8~(%nq;w;T-JXwAZe2xV?aUE9`|&T;+5#F?W%-0c!js@<^^oI4@wpQi8s77n#3 zw-1KA)nYX*77XF%3J1rGm08+~$|Z2?WtGWFZZ-~>c*?1*P5DXPT)ACv#vFz`bFe`p zwa~y8%@bQ<99@OEA$gvcFs)S3u=eVRwD>644a2Yxhr=^B4Kn~~*uXU-q&KO=i(&TR zm)QPN-pv10=Av#^Dj_iXy&FD<#Id$AE--mUPTN{N&eSt|`VmI&l+<~Z<~l(%0Z5IH zAvEZ(=KSZ(+SJ5!&VamEUZhYq376u1?+Gk2&w07()N$M*XQh0jxr9v~~DK{jTcWvNvxT^C(csuI` z@yYZVgcklHRU8RmDuH<6&&p_g=gej1r4A1*iawgS`AJyC&=1e3zRV5`n#@&2Fu2gT zhCY2{xV`lF(4u&;$Qj$vkWjckDW1kBfUNZLS|zIfDB;Q%2D?*E zPmh)HwU3)0oo&rM?I87slT*yYT=H}~%(9cklVdk3MhR0!BXc} zF&;o+jwHr(NR|?O{*Pe9r9zuS)BIh|S>O||C{ut|(WZ|X!TV($kR`iuY!+E35l~(w z-u2E}Fl;h=3@Cs{ZnRLtD~nKl8_T|EK3z5hDF4XV3-b0E*@@W5T8Y2B!3Wj+pkd!F zcP`2bb4^XKx(s!l9?g&?0>|npy!v?3R+6U`Lh70S(DhTVck^`RGNaQuRILzCp-TV9Y6|jFhrk<^_vr3}5gs5Wj zlg#@J3(Wiw#r3urQZ!zsLnf2ig!6WoiNon(;vAg>6WoT4yu!`+>RFa^Cc7s0c!i-2 zUIRb2{0YH5G-=Qik)3bL+MeYepbN#j{f`&27>SQo*zXym-s|p|@yyI5bKlo9FS^SX ztm0zRU;!=kKEho6^T4(cxNu&UFH2f9X8%^8NJuuUOS{ji`4}G@HuYNLUCfelSQ)~W zoM3Yun+1}aWdhTG9ntO)+CFgFexs9WbWXfQ&ZJVLkk~~txrX%>9=({D<33u&CnXNc zvoR|A(#9i!vX*nu7?3*nUG_|sD|un9Gdq@1{6{4;wbUsLWV{@||04PC`f;C`P%BY8 zphY4@kWLtwx@fl)Q0>sX=XE$k5bog#R6rHEZ-Sn%tss=Hk*pEfgerIIMRQJdi37U3 z#Ff5&jK_&w`BtJ1C{vFlvCeAC4Jy((dplTEfVIwnefMiad1h=%e{J;{Zkvd=^ky3f zzx5d7a||WXyWX3gCu{rem7(P7THu|-o7X=&*+m+{!y@q+#_Dw=fnqMdX?MyQmm4=M zz@c&V=6U{#{suy;!LqN@;~gc^yL&hBHq}u|;>}eMu~Gh? zpJm7Fp%TQR9@PSegS;>NVYhnx$R|@IsGzt>zz-#*CVfQp(~z7v<;aC%{n-s2WA@-R z%~fii#YQxI)WVJI-tl@8bVHqhWTRBAb>}Hjyy_3(Ck&;9Iff1~Z%FoxYdKB(=RU zYshMDtNCf1j)v|MGZDBMI~AU##-r!$YP0wQ7p5v3(pUX#+>)`2^X5`Mg0 zO*aWfJI*}_u364pcRSPADp!4XKLCB1vg#tjl2m%OlrpO|7_yvrfb`8c+D?1`%ztsR z3>*K=OYC(A3H)%2y%}16yku{_$L}95{3`KG3F_Tq*!gRY5TVw*4sgVjKKConPI%&E zCFXX>w$DGEjpl@QCij&JhwYEXo&61o)K>{Wm97~=GWru~!E^u5pNL|KF(djL#HzQo zQ~0cP;(P5fHLmzFf2|-Gsn5axLGJ~f3>O>BO_C)!mC@^XVU?SG`CJ*a2ozvU!_fy|5E zYa7TqFWfekgjf(JeKsW>RNaEMu>siOWNoDOUxutU^e9ftl)UxbDtEo3)`{fQ+;c04 z{$O=2^vF>0fhe=zV0RK9fDAFT|T_lI<-~i?yi|U(pO3Veg{L;1bvOumq zc&dg1mD13-H&7_MCgVT6!od zAAc?~v5KY7{GysfM~;^nSXDWT!YaA5;6C(PZ6sDkQcpGZ&lNP!s14BG0zk&HmuA@9 zG(LiCXuR*Sbjv(DI+m$%tznOBJKm$JmzR9ULfFTPt57-W)H?xug6X4Hi83IKi0oG~ zKWQD_fKGM^YSa2}FMrH8s^0-ZW9&xJV`f{ARG`xto`nuATe_KD2p;V72?W!CH7Nfi z`D73Hk7Z>9@6Z79jL`mkn1mSph?q1b+3PHXxoaj#;EcSA*4oJg((T?XT9C9dk}6&p zUlv?Ih`Wjpm*s3s8pxLQdPsM&YmZkp{?={Y>OfdzOKd*iRp0>=4#+>yNdd*CEv(he zN!~nWH$`ouSR&A$PB;g!Jm2#HRDT z;XwjYYu8BX7j;z4bF~bpjoRX|`QaV&g#&?9|NK`Ydly@HV{Ig9qJ=K}`?_Kf4bp{d zL1K@+2%l?FimyHo1sR=7Gg0@m|N%%51 z0&t;=8mW;8b2Znw@S4>v1i7EM52-9?jSMo6PnU6ob?fpJKl#jfJrZ}Z_t;r0g&No` zMRk#7=;&EAK<`J-3ptQ%%h}wKpO-!54zd&LASU;6f25+m5&la&4n^*4I2pNq5o~cb zmjd}FOL}`~`PHqJ1GCGhg6&<$44n*lcWv};*=rrw+y{?MOQKiqQ)M2Kw)2d%)ehZN z={BdGoA<+-sJ=3LIgUPmI(B+*lXv|2cq1TlW$Kp5Yt$B*NU?n|4D%POdu)N1lfM*u zHT+Eb==~1-$f>xNy=hljkXTEyT#VuoYl{`BEAF98k?y1R$9!pRRBGC=&79#wF6Id^ z2Y{boFIhQ;c;DoPMm|!55mGE$QBCg-<;@ybF`ml}-*au*UbXLa=4f1>CYf!=uQPK5 z-@SL_q&{6jopN4uT)ITC5bMs?ACoi!iuRM8ygq()Tem`otnN|8K@~>)g!!tE0OO#jm@&y992if(C^x_ZAVATyM z2-d@0gdpd>py}6%AhA<<)yZd#(C9uE$59i<7HxN7<_iaLZ&qqNt>~eY43b7gQCKdQ z(eH$b=h}-UwJtF8@tw#yZ)ulbK$yN{Vwn87l;WL z=lJ(^;m=W-jIO->$x6Ur zV@=}_Zp3A>8CnMn+Cv5tZzK2Hx3(vuS1E{Lwa?)a$4BbEarnRxL*zoB{TFLy{1r9;JGhV|4pyLU1 z=L#l7)M(W@+pjBgQjC-hzl8l}K4ZfTPa+AV8&$)S!+j?fY-X}i;Z;EqbFESK=8~Cf z5ZDT^;e^nk&QS0KY!WiXwM+Q7#nd02!?!L|jAEyF*``0U=;UWA5!#S2h~XRYC$$rWI0HIHYf?CZiM=N&M$0>o+IxK>{7`Lv7g|6}w*~;bwb)MDN^-89 zY(22M&7b0Z{uDt^T>%)^6-Qs*KWoop2Bj@?BtBeBl2CJG_lP6xb<0dEU|UG7{(sG3^%NxF=-<>pHjhpLYb%6tb{{@qb*eQ$e0Vs*8U85%rdT-jGSW53JOHsZVeEK# zsy?_s-SmHpsQYgkw5o#^$e>1Y*x1fa4)!&~S!l*ro*#Eu6q6k(04UhkJ3Gx8Y2aG@bpF=O- zA9n@;`83q&@%{(>PaN74g@yUWc%{>K$|IkohDJJge^yi+djAMD0EoZ;_aFe_anPOL z*GCzUpV?oSGB(W5mGj?$!pH;`*gNi_8`}8ePtHVDpJ>oaU5^3qw;O~EhGRYx-(-QkNICehBz9zd^N&;d z?=9HBP~c_ALf9Z7KRs@7YJz(|=kcAUW-(nld*iuZ<$!~65#jHJ-93yz?Up~@u)rkJ z>B~3SM<@uO{@Pl7IqhR{f&_qm>|kwO>hLjqCiwjW*FeH}G63V*UI43f>f1X}Xh=YJ zX5Xk^{y}d5ydA#;0{^jnd=dhneF0s-*nK~ezPUN07y4r{qHy3tJ_sNHyl^JR1q0c9 zzmW0p_&*Xr4?ynKKYra}Ij{Prr#=wf;@yQCJzhsykL=%o!13}~eKio2Ykkm`)?aum z#e+|LgbbKNK7xPPZ+!cHDNBnpE2tWGe6Ii+SA7roZ@3_bfDOYs=^+}CA?qul%{r=6 z@?B0gagjziCAwG-jxncMhQyyJWHYRXE=){lE0U<_o&u4jt~r^FbZHt@PUO2;u;&z7ypnyxNB}Q z<;lws8Q)(;z!wY|%iCz}B_Ei-qK>xqXUvbnQD)qtEe~baA_hUs~loDSY%- z)LKVVy)~*lth-#i^#}Vi*GY}7a?NpJKTlmmqz=2K$+9jpliH9iT9Q#^<5rmoGVB4_ z&Lx7V{IqM{1+D6^@G4I`*msy3e6LDV3m+Y;`GQlFh;s_Ft_5UUK=9)jIW{i&nf6GX_n_Vh;pt^KvUsfX;s9CDu@C0#<&< z{_9WB|5wAK}q_5*kTvJkIF8+kn3= znQrerlL)p6dto8yLQffB9SKg)A&81ig;`OokMjt#kxmHV(`x&A+9#e$qv7uw#%~d& z5X?)X-bkbn>_L0cBYbSfFF_Qt@&(dJp=CuU(r4Q;!(jm`DdXd#^!U%U( z!R4wFdfOuDpUJE7(0h1 z!P+p}rfu7{ZQHE0ZQHE0ZQHhO+qRuu_l|n-4f;Qvc;m#g_g+h&iGX0D-Qzp*Dx!Ep z>*ZLJ5w5mgTtjSLwMZA_#eejDwq#}Nlcb;S8!d1%4tU0zx(Tdr)ty_2I zi{Pp==CiXLR&mR|!&zbyk#3ezPUMn~R+b&K{dC%ZIp0n~j>FJwo`StCS&?FI4HU7# z*5`Utw1YW*ObwSTs-}|JBTg#Cvl)SX7 zLSzQ9r3DtpgznYnw(Du_qOz5iv)7o!f+VH9(|aG@Vysb_dO)|yhhgdBJ@~xC*(?a9 zg_$o&KB|OGp`}(d6wT2|nBCqpG?uMjBj2>W)hP6@7nR57xf(nhVf?JzW8M4WU9*{Q z-vIJySelH*M{|l zp|Rarv^VMAq|P4#rMEV&Ohtq(HF+TjkDk{Vb~M?#;8k^6jJNHnybSLrVV0Ez2>E#Z z)Lna!yER?5AD7?kK{v_QH`PL)d-{o4ql(XYUfuW>{wLTqr6WTrGnrNbBYm5@hE%^2 zqX2|TY=W)ENxPfrrqRuXBA(OQw1J~uDQ=xgt)A9I19|q=bQnLiKgxdx|GcSMbJTrc z2JrcWXEhGrm|4_M;&GxNj^X`1kY1tK+S;6}T&ol+SB%6^PZ}FsYEf%koKT=ikhG$; z9$a=+2mG>rcgsGeLe-Fm!j>t$2RH40qlrg zi&u2QD z#Eh>~;QLU-NA?s*mfTo@YgU)ui!>#bMp7+Uh~kszAdJcs2T`@w7dr0$Nh?q%QZ^9x z|KW+nqRJS|YR(Ir^n|00A-ApWw3Cf%V3Nn>etb?4P4E#~zJA1#PaAbF)H!}diS7Ec z{i4ERGz-R7I;vEy3DzlC5uN0$o`&-jwDht!mz8>?J4w7!&I(vW>9j(1MNMB#Nvgmq zG5%h%mbU4eqJl);mZZjJS#Ri!<xBBLR;mxP8wZ&={Lg(s(*TKHTiLf1v5*9vM&k8UP2-;ofMyx_ygODG}%Sh#NL6MUMT zYmoxu)`BveIQhAZdXpXr?sT>w1Zso}A_%A_TF@S!l+CypsK94P1bFwdNxz#U$!P1R z-{n$G3GSL8ScO=wsk)ojwf$r>SvV|*iE^E+X^lX-(WDsJB#}W#PqYogz+P>q&Kg7Y z!uf29E}DHI>fhz3>nMBnHjcSUUXRaeD^jrepAQn{0Bgz|E-HEBEA@F(%?IYbs|y@y zegjIHkvW1*${N!yKQmzhz&D0b&0Jn*@*2Yl8;Z_@E~u-VR}pe>OcP3QeUri-iXKL8kAoF4()R_zVG9t8N2_beOEr z7lBVsv~XPuc-+fk6?K=oVcU8a>5WZ$(Tdn|_$`vQ*CjNfknuNmS7J;Z#TqLi&MtPH zZUuuK1^%k%C%;z|FKWuRF8aHE2lnja-))~(r@Q9&w6~4mBThJeYKRM~J6rIyJz#J8 z!wYllC`jCr`C|QPfBU4mi21J9LpXG$?iS{*_sjX}l|V zpGk-8dq~947EzfkQoyP$!#NBeXnApG&4n+-sV`}Sm37kxV)9yJ{z{NWhDBKav}Buj z?qA)J_YwNIGg zQI`{s?Gvo2%(Q73?r?*{=3^L}j?KeGkti%b)uCTdFUlz{6f7*`+Jj?-rNPKpn5=SG z$HaC+Dd_aa`hqkM0axOD*cqM0+M^8$r)4$T*>{uf5qP;}3^fLQ<7Wd$_}OV7+ebxf zGCU#hn&sc=t#D64U}x}I%JQ*jO4cHtB2*=%b!P}}yur>AkItJH^fGq}L9_|=+^hbO4>{Cnsy4ub z7>OIoVL`PzVoSWM#^KDoo9zT)qDK>I6UPfRGLmo`5(3!AZ6 z_uh#;^zK^KS%@C*ov8&=BZxaTyrtAi$-(6e0#UVlNURAZ+-{+oO?2`UEnZg8dGO;d zD`R~P9(=~dBX5!+uOMyP9rg}8qw2Hl1M zlK^eWlosZOF7@%8rk<6gScgkkfsVby1VI0c*2bxj|IXB-!adB8W_TDWDa~&~@BaFW z?%-CYL~wEJ2@j0NXFI;lqgFs260>CRqxoiO&<|O3Zh^Aos$4H0lja2&jsi48(ui3z zP$E$;jZ_#D3Hyi5_@N9hBHG}qpP%->8oPMuG~0G`m=cN?=uM)qI}h+!Blv&GB5`G-4n?gi_aT@6ECRrSy61Q4%cEOJ7hAH`;8?x0!1eLw@)^gS=5wnYZE1NQCrx`oaxG8c@5>%>S- zHvHROo{-JSUX&q~xU3gX&M90miQzozMr67;C8)HEnEb1Uopr>#zqG$_pvmA0_L(T^U*$oH8?!2P|6=T9^ zSU%@`R~6UOm6&Is{FKNg8{sojj%o=Bk5`fEEww3`9^n5*6?>I9ZRv%CD} zR+Mduf8-QpzTSOa+|R1@VrLyR7qMno#s`&o@m6Q_LY`E`nYz(FZGb(V*|p$~r{Hu; z``q;T-&R39Y&d0oSr12&4{<3&$oXBe$mkO=UfHj5tBi9;q%TjjKg$m4w{xkm3zdx$ z-W|#0dKOX>(9NJR$mrv=H$1mj|A znvQO7No8n?E-$8#)Fx33{92whJ&`-}8CapJ5br*W9*i2ug_{v_GnbVAR?s_JxW7R> z+wVtU=}*jA<<^&f!_jiJu%_PI7!H$w$Tj@?{mTg!w-L0$7h59g_s(CJ%N_Cox~Gpx zs*t3Ozh=PPMT~qMamUUn5y?WrGo9Zy`M|*6ajot~UmAdGP1M;!Nr6g+dhei(y(a`C zjX62aRF;1q3X!7`9~5dNzeiKt`!vRPV?#oHbSa3$qrkWVz6on}a;P-D_$O?Josej} za+hkwPw-2JI_MvQ5xtfQz0c|ul~LID*dxu(a)^p+gl5H~j7`_!L*_3A=nk|3Z34OE zEz@eqMU<##3e+Q~?k$IGX<&Co+i<;KN=L!Z+q~;bg`;@U@Byq_sTwb zWqDRby^daDme=llp1ZI5iWd2`?NY(7v6OZ(e2QE2w`|&8T136a#t=o(TT_8Z^o+lB;=j<0A1vDe+s9(A!+yv99!7 zR9VXwPMowvce1OWmZRGb3NJZn%8~&{cmc%Ch^e^b9~_4Lv#mG*E|3_3etW)tzDuP9 zhF@xr`bx8`6aVJb4-yCtoice*H8CHK`h{#8s^K{nc*6Mk_ksRT53!NNA$O;L5{9{qg=HqsC?st zd<|9FON9X|UHLq0j?0+>K+CNDoHZ`_vunmzJUjlqg>i#q8h!lkk#w3LwlV6vjTW2N zvSslQt-k8buXNX)VQYlU_t}Ibvso~#R}H&*x;JDHii8W9zk%w)fnzKy75cRn^`J>> z)5Uz36qYE+Rj(jh(@|^IJ?m~a4Z7OGE<&Bc=Ll!uh?>c#twXpK&v99lh8u$pZp0>;q3 zC$onAoMFDR2&?V-fX{Vo z(y?nQwy7N2ty~wbIxL4WQ5V`uWAjaQv5H3qIvm9oT^G04Z&``W} zPz|k@D9=4!3C)|YrZ;b#Jl^(B{_ab&^tN%t#Bv6kIWiv6W8x^_ZqYrJ)ljY1`pzG~ z=5|)s*^tdMY}ir5(R;JGL+ASV#N(6ft8#cKNOBaW~9xfL+o<6QB|G>og}6AXTGn zyorq|Whg8bzWBV%yqxM(d^jJ_N4Mi3UHYe-j^;)r-gukJnPb`OxQACOkZ(Yjl5{2{ zy$uA3vwV0Y!GaaFVEF_sP9W(16df~)E#!J5cDf{v+Nl0@>G^3(u-W(Cpx9g*J8VzB zasi8QNedCd@-F*L)hEg%V2|-O`hd((kTy2HYz(kk8e|m)xpdSkN4zZiK8Zp#mbJ>p z+sc4QH1Iex5D2&jsL#OBbgkrjpw-^5M^otM&pyGCR;$jlA?hhcrb5i}%;FUbbWBXT zsO7&Fn7qV&7{5LL_r{nFo|vErk+Cu+ zCk`=PRDgQ%5OIXG>|=EFtA!jNuKeLQ?dU)Q2BKN7mI{Jf$vq`^L_a$p7q4EH6v~^c zpH2*k=_uffskcs?NJ zp`ITWA&Y5S@3iNtgQe>S-9WvfK!(S#RVQ$-iuQgm(s9@x{6KaLok2(-tfgq)1w}VA1N~hHddoDZD9&e#& z?2+#pG8w{{Z>M`s^e?0fa^qKcedPFo&1DHp85@P>TsVHuHl_XkbC2=KM+oeG`YTn@ zer11x=(WTc424i{#);N%ihcNX6Zw5f2m0n#*rugZ+nF9BV-$^2l6{ z3zWsn$3zb8YOkFILB_dzN%Bclv&%d0#^p|`$3ugZbctpDdeghE*(~phzkf)vws>hU zH8IGp1PmfQ#*Rs2QDGOxh@e~;ey6haxv}!a3nI&CQ!RLmVV9ibA2-eFV{z?xjt|ZC zCc4+hwajt>u4hg~7e182!Ch&xWL-_g2ECGmh%>xK7fjK*SVj(}r`xk$7q2*wrDs?N z#+P<%df>Hg8FrD+o_RHsXS7aYFm zmh%6>S0}ZZCIX=D3iYA?nrZFN+3YwYLAy`v(TEj{?0*w5b^%uwZ^|n)ptW%|BRR5$ zeImi8U&Gnn z2chN*$?B8+eEh-b#royrw8I;O?e4#I*Q^K2mE4*up%MZXZBjPkYo#<%L#96*=1U>0 zN5-{?f)n(bqEPEb^BmDpTIsI!sh$yJ&bWwcSY>c##sAWoCouhl8N$Z9bxxy#^#I_? zCW4}R77dTch9@{9!NB4}eJ45L3HQHKcZcUi{0^o&Z~FWYGl}bVMoZb=-Ye@G{%U{{ z{lwdEc=RN8H^c9o2zE)?ifLtA3TstWw_{H+8EZ3yr|0o)KObu!(su6fE#wo%6CkUHk9hli0p1If@~wVvvr7h3q^!=?#aq=ItY9#bJClx&M6A zVRO`)b`SabT#hht$5~CcmyEwlk>;NHgv0IZj*Rrf4DGKLQ-sE&0!^`NX1w{==zSWN z(VJUBhtj!=JMK-1CON62`ldOwdHSH8Us@bQ(sB_WE!TyHFgoeLwn`JftdN&!1CJc5 zpVkbfL+%bs#H~z=72vpSAvoT93o}fONyTCurEi`bEWtu6^yS0MnkfA~Nr=c|aB)K2 z9jjY$3(iTmsnyZjFO-CxImjGmKCQwFr@Pl1C&97hc^V@)XjS~P$j3NzGtB-=*a2A;u}!mI7Zyqwj-){eem zbCOvqs=Ir}4;uo31${Y(gn6D+pLK$`W*(>GpGYCtVOVp8jPQS(pE8PC*00oUC(tRi zI&}U1G4L-BK)Nk2pc8;u=g06+oyY&Z-TdGm?@ZpM&=c+2)G1G+p z^rxM#hWH$w!M`^GpEt{d7}GH22D`=9NUtR5jNCy%#tnIhM)i{O?_~Z#2^;j4y?wbs zc>|fm(|K%p*WAamQgI|LFMnI|qrW-~^Cn=+vu~v%2aTTmgjnfwh~XS%+}M9!+O6agJA%^q8JvlAwVc*eSO7hM z`K3%i-X6wzj@1YKJ}*0C`wtTplAZcj#2D-T`F z458eouLB0hvmBd^WAz_zJ)3o_$}gQB=Vq3%(<{!@Cu_W;t`quU&dn=yUrLRG(=~7A zAlz`a>i>OH3O=JNkFR}5?vDFSna*fYjOb57zeOd*81n;Vj9(9Ci&o9DpCjGN1s*+I zANc6nK3HP9Xoo0xhF(PPYqR*9d>t(}N*v1m8KGuXN~sG4Z~WuKjV`umq!P=_6VPk8 zSH=xp`0uLws?8P!NI&HUlxK zmE+Z8ncfc}QYF7SRGE-ZZ9WtAAW-+l!yL;@PavoiFQRuCf$KJ75B~~@^^~rymT-m=!hFZV{jg$4f8yk4 z7-1lvOgoYU^q+-2h^)jPr&?`U1$7PV?bz_Hx<+qpwQ3?<4n&&kADls+mz9Zee~n`B zM(`Vz!4LU;1c(^pbjS~ag}g&cnob7s#zE@2zKmEfN+*+Aii@3MxU5JL>WW2;9AwfJ z6I1u%Z0_AJzl|b$2%~~EU&nTOPfvqEoB0`dozB;V+z*oUwxb~XeV~S~*lHHzBvUG! zD)k#)%BTeTYV!<>%^Koe>wS*Fo~_2huBx2Y7pzH(^emjorNY{zH{9$)fQtBv+ly(R z^Y_cu=O~~=0>iI*lR8^U)HpoX!4=BxRrc{TvL~}?ZckBY$}j6jcGqnDex3XR=p@`b z|3|Bk{l8j;EKL8aRmjG~&hcNZLUtw=#{XX`{J-#HoIzEVtXAo>m7vB5!Q+xJIyyTA zmB29c5lqALl{=KNM6gIeNkl}jB+uh+=qwO=7-zhC9(Oudx~*0|W*fbJbG|p>fvZd4 zI+IYRfN0=@2G-j-{09IqSy@T>01(Co0YMxO85qul_Fne*Epfnn>KdUzz)*km;FxCg z5pePoLHiMXEg2{T)|c`6hJp7E&`*#Mz<>a^1oGx~V;IZ~{AtEu4M7zS0VoFZ^wDv^ zFw+W4nTJNuVkjP85&Nvif%cG)kn}%M;o=+txP@s175uRvY@uBRRGL86ft~eJ5E!-| z^(fOsZT9WO4dmq9+}z;ef}p{t*2S_yVE5nxHi4S@>GaLm>rnT|_5HcV0Kc#?!Qp@f zR?!X~v}%DHLpy`A`T>Fm@C+eCI|zuh^VRgt017w+#3fPl_8~%lT-Cm>`@r6u*a7I^ zYJQ78k-wP{K|ZK4j4dFY>_G&12^FyYS%>go=Hk?k{k{6u0SL;L<;CN=puA?iYaW8$w>ca;7(fkE5IKCJw2M^(B4@@@xZ6i?O_&u}kvj@OeQ1BN= zfB@hI?88fG$>LwU^yCWk!)*7hK!ot_#x;lmumXXoqaVVGdKrJOE?>BWfE31^D^;J~fWaOGSmTynT=T ztbKQ^kgyuJqTuquv&NT!rX)@sP!4o#X-LbyLa;wU~0HjbHXU-E&NY1~t{ z&K{3NvahN%lUpB{v$Y>gU8^q^ZA5 z<9>D`*}BFH)ZMaglcFfih6(A+SvN?CRC$BsM4uK>?=N!+SCCeSpM=&Y9Htykq-Wi2$bx%AlM zTnw*KE2v05OpZogNTuM&RQ%)_(*M0FbO>Jdu+35e;B)5UVs`GL;cQC^Urjs?n?2ED zwU2nZP0^hvIjOSQI1s(dx%hg0;Sg{!HV{h+ZAPwVZvnkQF8~B*v)mUpT5u_)NcmWu*_%}luZ%*jFR98J;Seh&I_qtT;>4C?S z34PPivt@-50pU@xBTArim)!a@-D1#HO?3Tm2fYlB z@|jyuf>Qj>L=)!LAwIkciWz9T4he^Tb)Os?9Vvf!5L^tS8mrCqE~SnN^9mM1RFmE~ z_eEz;4yjp;#DtQ92+76vYL3hXmD}?zL6Z{kLMWog4})L7Srd2&D_?{SJ^ICBj~B;X z8}v-!K}VKM-<~5F!Qked7Q&{SMlVnE|$_`DuW%fV{xSVg&OhIIy# z6NDteWy5lFQ-@%4F5&hSypv|4qH_olM##UZTJ7ZdcvP3Qu-R)S{stLYTGe{dImR># z?3rZWGRr8X$JYQLy5QU%w?7)v-{DU5ir`MVi zbQNU24*3j1}|uXzSpw#1buH{EW#8V#!&i zzR_sp?C(9r2rq|iIc`qo-4Uk69fJe6n4yHO4;y1`A*frU=;;mog^>RT8Ln*qj;}f~ z5wFuOuFwZ``Fp`g*_g$eH^5V(Oc0+2l4oRLNpV?aFI_@K+8z;OiP_I5Qcf2b_I*VS zp(Rn+D6F%b9~b*`UcZkaUDDR+a~|z;wqs#$@Vz=Bik7*SdRs3(KTNM>53adLoUCP@ zEw^$L@xWRM=DAd!hm2QKN^Ri6>eBWIxXk^51t8s?%eiw8gY0x!g ztv>4VDfrV=8BmTK<_ORrix|{%&xAy4!{K<#9crzlqkQR0f&eG&K(K$Ivrj>Xj#Bw{ znDpfqSLM-6A<1xWCI^LbvQzkg`7RBG%06YBgNV5`cb>;RITi=Du-cQn`Z-`dwsKoD z>Fx(&x_}s#0>M|7A;wBvzawlpn58>e%WN;{`>jOmU@w2^Vy3t)hmLSw)!&vWI3huE zU|xFG#yG_bKpcD>T?Xu_3;LJ3B-$*mNe*83!5J(;nJVLM=kR;NIr?Eyl9mweF$*O0 z*cWnS3}EERq&=e6)HZUu3NI4ZV%0ceBiey9d|s&j-UT)B8?4Z&|zZMb7ul+XT-(u}7Ue z{vbCKK2!oe?)p1o6%Y*LV2lv`z_t!WRIziePGur$Xs(pgwPkp}jHIcZRj z2nKa9nIR@ob~VuPnLUP@{)ETr53D{NQpKbLy7_EbPH z^b2zu-6MIo8FGw8{Nhml#y)ksUxay6SIrMb0%`)f`j+;VF1rPXoR;mtoI=%C9f{j@ z;9;2)NRssZ#(qR=ISRCsP>*lv$=KmQEoO&pa3ncxwIBf1Eu?5K*c|2Cn9&TE$P+`| zU8WXJ>2bHr*E_K4#XCYzVHcRsG?5Yc6$ocbrpBQ9BDW6Yiy0)kYV`D{sy!FNB!+Ac zvtky|0htB7f2Q#QF;P8O!BG!d`S$)d*x{BF39Y$~qwD1)hm1(FmruY}@LUa?;!V<1 z+M;l4dt8qJ1MJo}#BG;uhd+OJk%#b_wkbGXUT&uR;(_2Sz+*1Bpm8tFxj68tP zs{ahMYrQ3MdhFI=FK_zi7Ck2CE>_&MZkQkOrPRzMNNZ5+4Op^`TK+ z(-#eQp0lpXJ`v^%4MU6it1Wq_(dv%gL7Ou1R$Nt=neHq)pmt-igosSzOgFk>Wv5qO z6Hi9U8=0I_6CirxMOTZCav|&)|MG}GCYHW6XfOJtOdejrj%%&tzit!!2A>6iK`&ca zS{cFVh*l!n>OV7++xgd;uNEcO#!RuZs`$`+3^81MCZI?=^7Bx?s>{;?-Yo@bMqH5`U>W3B8E z%}-A0Y}4d=XCC>vhC6Uyb05{EFa6y3+Y7^~c1~xsEmm z0&cDs0KWlVhbdMwpNx4#xqZ@!gtv^)|SK5Ds^N% zXvjV7EE`@GD|%>Ss4NXo;JwQ}*D)GAiVIA9m5f1#Kda;^rX5jGKv|!$*umKj%vqg9GB1 zKz{;^ZNzZOzqi*SdftKMfjOXdWUjF^-guah`x!)f9c8o0CNHu49mHd>qUTVM6s)Wv ziuMQg6H~=Dj3d}*EHF(vrK_&q-1bFJb+0)~82^6S$@gaqSrpI*f;!Pf8XME{v8sIf zD!l_x;nREOz5YCIx|DzlR&?^kpsPADYL}^bxmc^B%S($gc5y0-eR#W5`?43-M*eYZc)~O}s)p%W%d_LL*E5UFG(1X@YNBqr~E*c#oPlvC1G` z8BQ^qlIr-FNXm!RU$1F=7%nb1+ZBqYu&cc(Ag|%FTqt}#J|tVCho9<9j2b#CqxQ;L z67`SG@;up9f#xSHj`gazGoY!34q@8bk3uqZUcN-FD4hv(2QPp(P zm{s*HdwEVK`3n9VJzlm6(@ZAu?KMSL=rlp2@x-nR6nn|+{mQQbr|(Wh%E)MEg7=iH zRIO%$$I0dchNmrlc=ik>)_W{MF3BLddFPk7m6dWJt<9^hYT2JZ6R^8s#2t;N)HBAT zv!?6U*Z%&J^+@&u|R6fJc3Y5KUu_i*v=NV)9LZ6%o zaZtWoeov`}6gd8Ak>~#6S)Qs)tY$PRST*93c+e#jVCcUZ`+bFDzY^0;Rkb0d zW7vdDmZ@G94TNUwrwW!UPZiIqTl=xt*EfAhRP-n z3fpfF@1L<1CPekU)l&NsaE_}(VO za&c@#uYpzq=6mh-Cvq3hmddE|RY>GYAd!+J!@TcYge@aE{Y=fxG8oknIOxb<|}a=!%JkatwI?5(~60plwO} z1L3b%3cm4z&_9Vl9=rX?yhin_=R+vR5%(c1`RznO^x^qNjiNf~0SR+1NgR6%oUpv~ ziUfuzuOkt|P&Oa=UUMPU7&$1*meOr#G`wu~Nzh86fZmwhbp!!!i~st+y1uFE>}E@O!Qzw$IGakxzIOmj59vh22F6n@gCL*8{*Wzdm(`2qmg_V z{ujsev74b}KIzp;hGNmyFPhE3o?2SHUGw+WZKbmbY3c6d19(Dxs3ESq4{q1zCb$gq zmaK!hyA$zvBFRVEBS62(SE#^-lIk@Y?3d%+J?;L7b@`c*7zRFNksU6X4*s=&S69%V z@={aIBev)#BU5)SasqkF(>uf8KNHHlv&PKLqKTTi(KcHeRewFkjm&3eImWGR+gOx; zsHo7L(uZreMb3NLcKwh3iT!qteJOtIAI|ngVJL+iu8>_hY8PA0niAq+^R0%t*S#y> z2)POfTEnS>%-F5@gm7v!Y1V-&R}fp^q_dqWqokz1GVp(tTKXZObkOec2%+^Z*)>it#H5rY z(y@{D%I(&saZ8c1j`vN!q-2o=%xK!&mVDt>%B!itqUe|!p68kHITCdP~DYNikRT5LGz7MFQW z3X9klg}pjF#s`yF)sT9em1~e_f4gs|-|T^SUDQEh?krd5yQ3%0=IlWwjRdve_8H8X`F+EEdwb@5T>4SXn4XO{`G&ML=ZL7q2% zUosnrZ)OE(;hPvFf<7@3#gVbb^jb&D>E*)L4ppBZ&tU8IlVYN&LN(jB6P`>hHQi8Y z^a@|G(&dzq-?k=kJYis{A8%LVpKVA6B5b79jRR8APr{ZsGh&@Eg|b!ZS!Yd8c7GI7`soXU>9@S;fU7~`bjXWU-O^4edeqj@IP^}^|=Dk8(m-`!+*tYWX#{8)Q)GV z^dEx{da_Gw^+O3icimj)@dMVQvUYw&9fs-eA9*;1_oyg*-e#$A`eEBWBC#@b37|ld zQ?6;5#lM>EH}wlM$qv4n`jG-C`HP!|1F*}3hLS8Z&-a^2SC;^nf7`W<8(O&N!?WIyHK2GH8u>6x^T>W#KnA7!7I znz4q3&w9!}Bt@!9R>PpOtxg*J8=++lz@dsl>Jy0d5S^8Hyqln^+j8cwM-#8mQy06_ z-TiZ&5zhUsl-ATKrx7Ar7W^J^WAo>WUJXwDMA%-gFtnoHFiwIxZ)fy|6ACUfK5!B0 z#&cV@Reu7g`6(*SMp&^9OiR8>JaAqAOowe%nj|`=kW(TmKGbXA-`DB!4EFSu(QV?P zz*txY)tsh?QHq``&8RG|rcYBY)fi z5d2W-*`OC%j+jHeIDSf*+sJ9lt@RmbLyD}{yq^(zpT7=z;-0|9XQ#!B03xrxCYZcZWM?g%G}x`AvMaY7&e<_`$d z;7-aJj%^if8+kufAn7TBIxD}~iZD>V6~f^#9cjYt3HaAX)68Z~A+KP&D|gLsN#ubh z3MIzmj)QcJJMs>Qnz^K_Xx{ng%F%2PTac^U_QA8#$}=IFdZO9erm>q2>zNtD!}4mO z3*0`c6L1YUtBKs&E0}WMRpe-~m56?C8LF6B+IM}Ww>xY&&}n)5oj}Y)b+7=gm1^40 z;%f$mJs3!QHjp|GwBQ!|OuWLeiK_Al+By(%&py$-1q`jp_b*y8KsKgo_7 zOB?41>A9>Of|nL2bqCC*6&&Ucthxf!+Yz<%?(mG7s@&=YUl;o7*-SyiqmOFYF0RF= z>PP|`J3E$msf!SMoq_o+KN6{dV=0O8M{t5`LDE$HguzW z2gh(u&UTe_af22uGAtnJAsn7Z9-52{;}KrXz&vdBI?>oVBwH$27?d?ICdNS@cG%Co z$DG+A()Rc4uWx`Cz+9ZEU^$nc!afq^=g6x#XchgK8(*!6XcQYxnSUfQhlCuA=7qH) zy;zcivFvm)@1J@H9{iLW3an3SvVXqyH}F#LFR8fXEv|Q}Jkz-q4J-aK5w4uiZMn7Q zk3W&Vg3UG+1i@@1+e7~e49lV&jrz02qzSsZ(4C9)>QJCcOZ5g9J5L^a|ET%8PF2P> ze;@g0Cs?GDF8YpZhwb|O(%fz8nICgw*VZvx+OoV$BNO493_|BzO5Qe#BcqN!J`x^f za)*rOh;4|mvO}Y-rh8VjW+z6pUA^80I9&i`|M+4L{J)Iw*IgDUW6Ng&>ynxm!NE?;6`?n4lU)d_Tl zmI_O9W?!I%fLO>24o+eLLfS2R?Ro9K{q0?Ot=7C`H{<7?@tE;_G4L%ao}>kKX$q#~ zB8uB0z{|rBkkir8!~g(!cmxRWcAuK^v@hblqQ{6`2RJ!^auW&vR`<_>hKUj}c+e-I zlG{cERB&hn_kRN!aB1Re|8-dFJFf)^M@1aulUN^x?2a17Ae zBv9P^>ISJ3TmvLfR5YmBJqN%9PlLt*5(8N3m%vT~wiJh0!^^vb2pEjh{iW(BGYAsl zinxF9ba%h=$JO@0(Wxq4YX`uyFM<^SKY?;`2onVCg#c#hgRA48a=%Lh^klPN8TcLg83?oTQ6-z5hJ zMlopu)JN&>J!==z-jkD1$5U_nrjP9EoyfD*1O!ZWa<=y;jH_|)ogs&J3lLOTy&3*2 zZFGeYhYz0B3q{2NZ2k}hx;PoCjP>X4>`yxWg%T8W|J7e%AQ3>IAey2d0Qctv*3Ut} z-qAaL?#j~d&Cb(fhz!V$O)Nz2gAxTg0dEb=|GD$l?!RFGSQv&qIepxX@zZiAKmdRW zBLGZcu;Ku^&Ap(&Fnt~sW8DS4fpiBGv495w`1$xYGl@(z-YevbW8rd`_25cQ-Oy0y|nK0`$r3}!T}`M z!-p%I{LBpd)N9cHv@%`;{M`{6L@YMJ@V~}C&jbJsKv)8Q`sD%WRsQ*P{;iz&mHqhj zA`oTw`rNf`+5P#A#l8Y)ef^*YAT?npv7}kTRU8a>+f@)=%T-hh6Wq6j`@K{Z3sgKL z45|~8%)%z=14elZ8q`7E&tWJ-!-1@SCobys3fLILi}APM>=^Lt<|w222So8MD-T-B z*F{xV8U1PNt0_Yi`LVsB#}376@XHkj1at`g$q?fcBm`I+2E7UiLjsvV0(tXSFoF*8 z_*vohPX*r(7byl%$od9Qi=lJx-Jqd>+7pd#0)9jP!Ulu{ayO9scTyMe{{ak9BzWiz zR8ZO%{Tf9<0=VM}(229J<3+JGdDb(a2%F?5!>5{jY<;IkLSRQnN15FHAI8ohND~EE zvt`@1ZQJbXvW>rN+qP}nwr$(hWn1rV-b75yW^$LCTxVpQFVChZ^VinTcW=KzE)&%5 zb~C9M-+C)W`*XKU=w^_Yj|zyF;K_D)oEO_39OgzDlVNXSepUu^omL^&8mtmq)AfA3 zi@@9mi_=w;nymgAx&5eo-P=s&E{pHS3!D$j!Wks|5St;YR;*znU5-Y9EMX>w&2rFe zS6soWPv>-SZ#6rAQv?BBv3TSl4RH<5b&jeyw&gKfAw*Xd&$!u?aF5FXs?6$@YFIm_ zevv#$BKsni3i&4E9SR=}Asr$dJOj$}qN_M~WjkaI;eSe;2()2Hi(_zm8h8vR=-Niu z9k<1BAG*Bwahe9fECU6)NPUG{*6jfps46_i_3#b*Db!nE+b(6t6yitj_E@#>dFmmN zPto6x*UgKge(@C4k1b-E>3-fC2lOwA&Q=A7N&jz)yj?Bn2Zrsr*Hf^XhXlUqznPsDkS9I%r}P+P8c?3qeYJ zwU0;n(eXWvpDJwQbkE*8wpb_+0lYdC>bgFy-z4uBCrSzxh8!tGX?3 zP|Gcl26h@ROB}(!1uic29vxu(s^*?Dc=6I&1*N7K^$z320M z4zwM7+`Hz~8dSr+wdjCla(2|GC|yeU2t zcuFCt2!d?Qlv{SFXBTtoN&i+@AmbHeP$U*rLt}MJfW;3CdwoXsI-`TnTbv(8Gz6a$ zuM(x{TqMb)C|r=JvFg{EZWl=PPw-^V#SJVECl9q;>u9B+38SL!X7#`!Hxrw}J`F-CU! zyN%k|p3LlfJU!{OxT)~w9z=1=0-__qkIamxb56e^*Z2|;ht4SBf4?3Ndk*GekPF24 zs`)XXV@V82-xyzbZ2!~1A*hFw`pCY;9XAYvslofIJ-ai}a{(+(yF_rh+FDtLV45<} zBV}qV*nIlD9y`2CS90|}$+kc{n*U_PPs_CXP<^iibFFT|+4IU25!pw-h$TA)G1?IL zoF`0|y*KfsJECOP3v`C%!_P34^@fb1tjrw_xkK{+@-|w2qRu2k8Unn!r4QJKO*HNY zitAMU^lrnSJmGETSf*bu&$hQu^mARQveU3T9stnQ|E ze7q&I;JQ_qMPCtJZZWZKr!1j1Y?K`-nzh@EY9lH6FP0n$1~N$thpimU&|9QJk}a1V zjPP>#*gMfzT*v%*_N-y1_-Qe)rpH;>OvhW~z{Jgj*lI~q>O3+!`Tz@b1>eaegflpB)b@z#VDW!H3ejyQ)r-&0@kg@e3d+-3uXA~CegM9d-|Miem>6}*afUS z?B6uq>hP=k9ZSqD89qU{*^mA4xt%czMW4GyNucla{eb5X=DevFNJ{aYS(&QAPb@)4 z$_*$O+9)u3aFOA6t*>+h3o5Fvh&!f}@$89-X#vfAc|+V~k4z^<2t#^u-i)Ui%#_cS9L5k}jIM3Vs!a77sh|Dn%57wmN1nR;jn3HO|#o4V_ z#!3WG=I+Bvt+i03;O+eS7L^|le_g7m$XVlxVeZ#|pcDg*Q*;QAr8czv038{R<(~hM zu`K7fG*keonOxi)JQXB&4>SQ5(&UR9H<1rDe+3SmNT8xR^TVMAC+x?9U-gIw$2nx+ zC}Qlf+y%VP$=EfXCLA|27HR_Ds$0d*|M*;^Q{ODC%&(hiBB#L+qDro@c+kiYDhV^W zlsfCbij!NR{;3wsOIxlwwp5srWXNwTCl%pwd}1RP^fmw5>u58KRGpQhj@Ydo)oW?) zKMR~dEwCm4K@yHS$lY>e4o^>zuE{p9V`Avwl3p1VrmMVZLA}8)U{IK?-TJxK)vhEO zX|tNt@S?lBN7>Qz(J@rdw_Fr&mK6TKu~8(Z$;9c*;P>Ud*UbhRbDABxu@OaD!9s7F zC)vL38I=h-;Vi>M`kfOB-;=;p4WeB&(0@Z}nlJ{Zz6)O}RLtL7*pk?qOy2P)SU%g} z>2vJ3!J+vCjor_a<~n31;u$O+3^X{{#K#2!E0dm^D=KFVPWdXAGJ2UNeENMTIz@9C z{@^M_3*^U0{#(F9s~xr0rfx6_;Xd#$K9tEoF5`}eUrfaF{5&2i_J_NJRRrsMSW@vp znXY&o>r%idK)XqQw9a8mO=2*dvtqcMHj*L{pUW~3zUaC-h~}JfI2qotN|M~lE|;e%f!6adt$HzI zZnUPEAQ((xX#@G@?3Q|;V`{lvqTDhiYV~8F%@bq7vnr$%fpAaOGyT4@D|UgYxqT#I zm#_xB6d6}2y18(APq2qS>oY33cRMyw;}Z9CcD`D>8CZS@p(}V=nKE#;PWXNe@_icz z1|$KDf3JGgLWs!iP~FiGdPWs?R>@6*r}nju@&tW&+Z>1e+Pln|<<1x~wxO9XQU)bo zjAv|H7eiO_T~AHH{WhZ|%x?)_vw5w?J1{{Mza1g|mQnr)lF(Z8@ZW1+&mgjDE*Al1 zd%JD${QqJ-ya?wj5o5^{Rx*8T+^x5WDbw3;4~c_tB`_Aym$4l z+)CBd@Ju07eoK;(gfkki>-q!ZK|5x;ZFVM#AWmb~X*6~>FU*P8#O-VBIgJp6rCafp z$ZSf916ul)DXgte34}n$&!M=@bP7!ZbjW!t`xZbLB z5wgu&)2i8rp%&ibo`H)EzI>xib%0D6=D+W*wr)xnYg4}29h!cUXsMV2nzL-5D~G_r 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 P1A_RTF*D1l%Rl=sBn4m~ diff --git a/applications/steadyStateAllenCahn/parameters.prm b/applications/steadyStateAllenCahn/parameters.prm deleted file mode 100644 index b433c4f30..000000000 --- a/applications/steadyStateAllenCahn/parameters.prm +++ /dev/null @@ -1,122 +0,0 @@ -# ================================================================================= -# Set the number of dimensions (2 or 3 for a 2D or 3D calculation) -# ================================================================================= -set Number of dimensions = 2 - -# ================================================================================= -# Set the length of the domain in all three dimensions -# (Domain size Z ignored in 2D) -# ================================================================================= -# Each axes spans from zero to the specified length -set Domain size X = 100 -set Domain size Y = 100 -set Domain size Z = 100 - -# ================================================================================= -# Set the element parameters -# ================================================================================= -# The number of elements in each direction is 2^(refineFactor) * subdivisions -# Subdivisions Z ignored in 2D -# For optimal performance, use refineFactor primarily to determine the element size -set Subdivisions X = 1 -set Subdivisions Y = 1 -set Subdivisions Z = 1 - -set Refine factor = 8 - -# Set the polynomial degree of the element (allowed values: 1, 2, or 3) -set Element degree = 1 - -# ================================================================================= -# Set the linear solver parameters -# ================================================================================= - -subsection Linear solver parameters: psi - # Whether the tolerance value is compared to the residual (ABSOLUTE_RESIDUAL) - # or the change in the residual (RELATIVE_RESIDUAL_CHANGE) - set Tolerance type = ABSOLUTE_RESIDUAL - - # The tolerance for convergence (L2 norm) - set Tolerance value = 1e-10 - - # The maximum number of linear solver iterations per solve - set Maximum linear solver iterations = 10000 -end - -# ================================================================================= -# Set the nonlinear solver parameters -# ================================================================================= - -set Maximum nonlinear solver iterations = 100 - -subsection Nonlinear solver parameters: psi - set Tolerance type = ABSOLUTE_SOLUTION_CHANGE - set Tolerance value = 1e-5 - set Use backtracking line search damping = false - set Backtracking step size modifier = 0.5 - set Backtracking residual decrease coefficient = 1.0 - set Constant damping value = 1.0 - set Use Laplace's equation to determine the initial guess = true -end - -# ================================================================================= -# Set the time step parameters -# ================================================================================= -# The size of the time step -set Time step = 1.0e-2 - -# The simulation ends when either the number of time steps is reached or the -# simulation time is reached. -set Number of time steps = 10 - -# ================================================================================= -# Set the output parameters -# ================================================================================= -# Type of spacing between outputs ("EQUAL_SPACING", "LOG_SPACING", "N_PER_DECADE", -# or "LIST") -set Output condition = EQUAL_SPACING - -# Number of times the program outputs the fields (total number for "EQUAL_SPACING" -# and "LOG_SPACING", number per decade for "N_PER_DECADE", ignored for "LIST") -set Number of outputs = 10 - -# The number of time steps between updates being printed to the screen -set Skip print steps = 1000 - -# ================================================================================= -# Set the boundary conditions -# ================================================================================= -# Set the boundary condition for each variable, where each variable is given by -# its name, as defined in equations.h. The four boundary condition -# types are NATURAL, DIRICHLET, NON_UNIFORM_DIRICHLET and PERIODIC. If all -# of the boundaries have the same boundary condition, only one boundary condition -# type needs to be given. If multiple boundary condition types are needed, give a -# comma-separated list of the types. The order is the miniumum of x, maximum of x, -# minimum of y, maximum of y, minimum of z, maximum of z (i.e left, right, bottom, -# top in 2D and left, right, bottom, top, front, back in 3D). The value of a -# Dirichlet BC is specfied in the following way -- DIRCHILET: val -- where 'val' is -# the desired value. If the boundary condition is NON_UNIFORM_DIRICHLET, the -# boundary condition should be specified in the appropriate function in 'ICs_and_BCs.h'. -# Example 1: All periodic BCs for variable 'c' -# set Boundary condition for variable c = PERIODIC -# Example 2: Zero-derivative BCs on the left and right, Dirichlet BCs with value -# 1.5 on the top and bottom for variable 'n' in 2D -# set Boundary condition for variable n = NATURAL, NATURAL, DIRICHLET: 1.5, DIRICHLET: 1.5 - -set Boundary condition for variable n = DIRICHLET: 1.0, DIRICHLET: 0.0, NATURAL, NATURAL -set Boundary condition for variable psi = DIRICHLET: 0.0, DIRICHLET: 1.0, NATURAL, NATURAL - -# ================================================================================= -# Set the model constants -# ================================================================================= -# Set the user-defined model constants, which must have a counter-part given in -# customPDE.h. These are most often used in the residual equations in equations.h, -# but may also be used for initial conditions and nucleation calculations. The type -# options currently are DOUBLE, INT, BOOL, TENSOR, and [symmetry] ELASTIC CONSTANTS -# where [symmetry] is ISOTROPIC, TRANSVERSE, ORTHOTROPIC, or ANISOTROPIC. - -# The mobility, MnV in equations.h -set Model constant MnV = 1.0, DOUBLE - -# The gradient energy coefficient, KnV in equations.h -set Model constant KnV = 2.0, DOUBLE diff --git a/applications/steadyStateAllenCahn/tex_files/allenCahn.tex b/applications/steadyStateAllenCahn/tex_files/allenCahn.tex deleted file mode 100644 index d2b763351..000000000 --- a/applications/steadyStateAllenCahn/tex_files/allenCahn.tex +++ /dev/null @@ -1,223 +0,0 @@ -\documentclass[10pt]{article} -\usepackage{amsmath} -\usepackage{bm} -\usepackage{bbm} -\usepackage{mathrsfs} -\usepackage{graphicx} -\usepackage{wrapfig} -\usepackage{subcaption} -\usepackage{epsfig} -\usepackage{amsfonts} -\usepackage{amssymb} -\usepackage{amsmath} -\usepackage{wrapfig} -\usepackage{graphicx} -\usepackage{psfrag} -\newcommand{\sun}{\ensuremath{\odot}} % sun symbol is \sun -\let\vaccent=\v % rename builtin command \v{} to \vaccent{} -\renewcommand{\v}[1]{\ensuremath{\mathbf{#1}}} % for vectors -\newcommand{\gv}[1]{\ensuremath{\mbox{\boldmath$ #1 $}}} -\newcommand{\grad}[1]{\gv{\nabla} #1} -\renewcommand{\baselinestretch}{1.2} -\jot 5mm -\graphicspath{{./figures/}} -%text dimensions -\textwidth 6.5 in -\oddsidemargin .2 in -\topmargin -0.2 in -\textheight 8.5 in -\headheight 0.2in -\overfullrule = 0pt -\pagestyle{plain} -\def\newpar{\par\vskip 0.5cm} -\begin{document} -% -%---------------------------------------------------------------------- -% Define symbols -%---------------------------------------------------------------------- -% -\def\iso{\mathbbm{1}} -\def\half{{\textstyle{1 \over 2}}} -\def\third{{\textstyle{1 \over 3}}} -\def\fourth{{\textstyle{{1 \over 4}}}} -\def\twothird{{\textstyle {{2 \over 3}}}} -\def\ndim{{n_{\rm dim}}} -\def\nint{n_{\rm int}} -\def\lint{l_{\rm int}} -\def\nel{n_{\rm el}} -\def\nf{n_{\rm f}} -\def\DIV {\hbox{\af div}} -\def\GRAD{\hbox{\af Grad}} -\def\sym{\mathop{\rm sym}\nolimits} -\def\tr{\mathop{\rm tr}\nolimits} -\def\dev{\mathop{\rm dev}\nolimits} -\def\Dev{\mathop{\rm Dev}\nolimits} -\def\DEV{\mathop {\rm DEV}\nolimits} -\def\bfb {{\bi b}} -\def\Bnabla{\nabla} -\def\bG{{\bi G}} -\def\jmpdelu{{\lbrack\!\lbrack \Delta u\rbrack\!\rbrack}} -\def\jmpudot{{\lbrack\!\lbrack\dot u\rbrack\!\rbrack}} -\def\jmpu{{\lbrack\!\lbrack u\rbrack\!\rbrack}} -\def\jmphi{{\lbrack\!\lbrack\varphi\rbrack\!\rbrack}} -\def\ljmp{{\lbrack\!\lbrack}} -\def\rjmp{{\rbrack\!\rbrack}} -\def\sign{{\rm sign}} -\def\nn{{n+1}} -\def\na{{n+\vartheta}} -\def\nna{{n+(1-\vartheta)}} -\def\nt{{n+{1\over 2}}} -\def\nb{{n+\beta}} -\def\nbb{{n+(1-\beta)}} -%--------------------------------------------------------- -% Bold Face Math Characters: -% All In Format: \B***** . -%--------------------------------------------------------- -\def\bOne{\mbox{\boldmath$1$}} -\def\BGamma{\mbox{\boldmath$\Gamma$}} -\def\BDelta{\mbox{\boldmath$\Delta$}} -\def\BTheta{\mbox{\boldmath$\Theta$}} -\def\BLambda{\mbox{\boldmath$\Lambda$}} -\def\BXi{\mbox{\boldmath$\Xi$}} -\def\BPi{\mbox{\boldmath$\Pi$}} -\def\BSigma{\mbox{\boldmath$\Sigma$}} -\def\BUpsilon{\mbox{\boldmath$\Upsilon$}} -\def\BPhi{\mbox{\boldmath$\Phi$}} -\def\BPsi{\mbox{\boldmath$\Psi$}} -\def\BOmega{\mbox{\boldmath$\Omega$}} -\def\Balpha{\mbox{\boldmath$\alpha$}} -\def\Bbeta{\mbox{\boldmath$\beta$}} -\def\Bgamma{\mbox{\boldmath$\gamma$}} -\def\Bdelta{\mbox{\boldmath$\delta$}} -\def\Bepsilon{\mbox{\boldmath$\epsilon$}} -\def\Bzeta{\mbox{\boldmath$\zeta$}} -\def\Beta{\mbox{\boldmath$\eta$}} -\def\Btheta{\mbox{\boldmath$\theta$}} -\def\Biota{\mbox{\boldmath$\iota$}} -\def\Bkappa{\mbox{\boldmath$\kappa$}} -\def\Blambda{\mbox{\boldmath$\lambda$}} -\def\Bmu{\mbox{\boldmath$\mu$}} -\def\Bnu{\mbox{\boldmath$\nu$}} -\def\Bxi{\mbox{\boldmath$\xi$}} -\def\Bpi{\mbox{\boldmath$\pi$}} -\def\Brho{\mbox{\boldmath$\rho$}} -\def\Bsigma{\mbox{\boldmath$\sigma$}} -\def\Btau{\mbox{\boldmath$\tau$}} -\def\Bupsilon{\mbox{\boldmath$\upsilon$}} -\def\Bphi{\mbox{\boldmath$\phi$}} -\def\Bchi{\mbox{\boldmath$\chi$}} -\def\Bpsi{\mbox{\boldmath$\psi$}} -\def\Bomega{\mbox{\boldmath$\omega$}} -\def\Bvarepsilon{\mbox{\boldmath$\varepsilon$}} -\def\Bvartheta{\mbox{\boldmath$\vartheta$}} -\def\Bvarpi{\mbox{\boldmath$\varpi$}} -\def\Bvarrho{\mbox{\boldmath$\varrho$}} -\def\Bvarsigma{\mbox{\boldmath$\varsigma$}} -\def\Bvarphi{\mbox{\boldmath$\varphi$}} -\def\bone{\mathbf{1}} -\def\bzero{\mathbf{0}} -%--------------------------------------------------------- -% Bold Face Math Italic: -% All In Format: \b* . -%--------------------------------------------------------- -\def\bA{\mbox{\boldmath$ A$}} -\def\bB{\mbox{\boldmath$ B$}} -\def\bC{\mbox{\boldmath$ C$}} -\def\bD{\mbox{\boldmath$ D$}} -\def\bE{\mbox{\boldmath$ E$}} -\def\bF{\mbox{\boldmath$ F$}} -\def\bG{\mbox{\boldmath$ G$}} -\def\bH{\mbox{\boldmath$ H$}} -\def\bI{\mbox{\boldmath$ I$}} -\def\bJ{\mbox{\boldmath$ J$}} -\def\bK{\mbox{\boldmath$ K$}} -\def\bL{\mbox{\boldmath$ L$}} -\def\bM{\mbox{\boldmath$ M$}} -\def\bN{\mbox{\boldmath$ N$}} -\def\bO{\mbox{\boldmath$ O$}} -\def\bP{\mbox{\boldmath$ P$}} -\def\bQ{\mbox{\boldmath$ Q$}} -\def\bR{\mbox{\boldmath$ R$}} -\def\bS{\mbox{\boldmath$ S$}} -\def\bT{\mbox{\boldmath$ T$}} -\def\bU{\mbox{\boldmath$ U$}} -\def\bV{\mbox{\boldmath$ V$}} -\def\bW{\mbox{\boldmath$ W$}} -\def\bX{\mbox{\boldmath$ X$}} -\def\bY{\mbox{\boldmath$ Y$}} -\def\bZ{\mbox{\boldmath$ Z$}} -\def\ba{\mbox{\boldmath$ a$}} -\def\bb{\mbox{\boldmath$ b$}} -\def\bc{\mbox{\boldmath$ c$}} -\def\bd{\mbox{\boldmath$ d$}} -\def\be{\mbox{\boldmath$ e$}} -\def\bff{\mbox{\boldmath$ f$}} -\def\bg{\mbox{\boldmath$ g$}} -\def\bh{\mbox{\boldmath$ h$}} -\def\bi{\mbox{\boldmath$ i$}} -\def\bj{\mbox{\boldmath$ j$}} -\def\bk{\mbox{\boldmath$ k$}} -\def\bl{\mbox{\boldmath$ l$}} -\def\bm{\mbox{\boldmath$ m$}} -\def\bn{\mbox{\boldmath$ n$}} -\def\bo{\mbox{\boldmath$ o$}} -\def\bp{\mbox{\boldmath$ p$}} -\def\bq{\mbox{\boldmath$ q$}} -\def\br{\mbox{\boldmath$ r$}} -\def\bs{\mbox{\boldmath$ s$}} -\def\bt{\mbox{\boldmath$ t$}} -\def\bu{\mbox{\boldmath$ u$}} -\def\bv{\mbox{\boldmath$ v$}} -\def\bw{\mbox{\boldmath$ w$}} -\def\bx{\mbox{\boldmath$ x$}} -\def\by{\mbox{\boldmath$ y$}} -\def\bz{\mbox{\boldmath$ z$}} -%********************************* -%Start main paper -%********************************* -\centerline{\Large{\bf PRISMS PhaseField}} -\smallskip -\centerline{\Large{\bf Allen-Cahn Dynamics}} -\bigskip -Consider a free energy expression of the form: -\begin{equation} - \Pi(\eta, \grad \eta) = \int_{\Omega} f( \eta ) + \frac{\kappa}{2} \grad \eta \cdot \grad \eta ~dV -\end{equation} -where $\eta$ is the structural order parameter, and $\kappa$ is the gradient length scale parameter. - -\section{Variational treatment} -Considering variations on the primal field $\eta$ of the from $\eta+\epsilon w$, we have -\begin{align} -\delta \Pi &= \left. \frac{d}{d\epsilon} \int_{\Omega} f(\eta+\epsilon w) + \frac{\kappa}{2} \grad (\eta+\epsilon w) \cdot ~\grad (\eta+\epsilon w) ~dV \right\vert_{\epsilon=0} \\ -&= \int_{\Omega} w f_{,\eta} + \kappa \grad w \grad \eta ~dV \\ -&= \int_{\Omega} w \left( f_{,\eta} - \kappa \Delta \eta \right) ~dV + \int_{\partial \Omega} w \kappa \grad \eta \cdot n ~dS -\end{align} -Assuming $\kappa \grad \eta \cdot n = 0$, and using standard variational arguments on the equation $\delta \Pi =0$ we have the expression for chemical potential as -\begin{equation} - \mu = f_{,\eta} - \kappa \Delta \eta -\end{equation} - -\section{Kinetics} -Now the Parabolic PDE for Allen-Cahn dynamics is given by: -\begin{align} - \frac{\partial \eta}{\partial t} &= -M~(f_{,\eta} - \kappa \Delta \eta) -\end{align} -where $M$ is the constant mobility. -\section{Time discretization} -Considering forward Euler explicit time stepping, we have the time discretized kinetics equation: -\begin{align} - \eta^{n+1} &= \eta^{n} - \Delta t M~(f_{,\eta}^{n} - \kappa \Delta \eta^{n}) -\end{align} - -\section{Weak formulation} -In the weak formulation, considering an arbitrary variation $w$, the above equation can be expressed as a residual equation: -\begin{align} -\int_{\Omega} w \eta^{n+1} ~dV&= \int_{\Omega} w \eta^{n} - w \Delta t M~(f_{,\eta}^{n} - \kappa \Delta \eta^{n}) ~dV \\ -&= \int_{\Omega} w ( \underbrace{ \eta^{n} - \Delta t M~f_{,\eta}^{n} }_{r_{\eta}} ) + \grad w \underbrace{ (-\Delta t M \kappa)~ \cdot (\grad \eta^{n})}_{r_{\eta x}} ~dV \quad [\kappa \grad \eta \cdot n = 0 \quad \text{on} \quad \partial \Omega] -\end{align} -\vskip 0.25in -The above values of $r_{\eta}$ and $r_{\eta x}$ are used to define the residuals in the following parameters file: \\ -\textit{applications/allenCahn/parameters.h} - - -\end{document} \ No newline at end of file From 4cfd7277010262cce9c78a4e637c9970d7db12d1 Mon Sep 17 00:00:00 2001 From: landinjm Date: Mon, 14 Oct 2024 12:34:46 -0400 Subject: [PATCH 10/14] Revert "Dirichlet constraints can be distributed here" This reverts commit b0f8edb0d0a43c43058c4bb4d1438a3d4ea85ab9. --- src/matrixfree/computeLHS.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/matrixfree/computeLHS.cc b/src/matrixfree/computeLHS.cc index 2606b1ade..322e51f67 100644 --- a/src/matrixfree/computeLHS.cc +++ b/src/matrixfree/computeLHS.cc @@ -35,8 +35,15 @@ MatrixFreePDE::vmult(vectorType &dst, const vectorType &src) const true); } - // Account for Dirichlet BC's - constraintsDirichletSet[currentFieldIndex]->distribute(dst); + // Account for Dirichlet BC's (essentially copy dirichlet DOF values present in src to + // dst, although it is unclear why the constraints can't just be distributed here) + for (auto &it : *valuesDirichletSet[currentFieldIndex]) + { + if (dst.in_local_range(it.first)) + { + dst(it.first) = src(it.first); + } + } // end log computing_timer.leave_subsection("matrixFreePDE: computeLHS"); From 5108888d9ec4806c4f4bd5d16f3da9dc956de5dd Mon Sep 17 00:00:00 2001 From: landinjm Date: Mon, 14 Oct 2024 15:40:05 -0400 Subject: [PATCH 11/14] simplifying the triangulation creation and assignment + transfinite interpolation --- .../CHiMaD_benchmark6b/customPDE.h | 130 +++++++++--------- 1 file changed, 62 insertions(+), 68 deletions(-) diff --git a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/customPDE.h b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/customPDE.h index 0d5dd1118..0c332d389 100644 --- a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/customPDE.h +++ b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/customPDE.h @@ -1,3 +1,6 @@ +#include +#include + #include "matrixFreePDE.h" using namespace dealii; @@ -105,48 +108,41 @@ void customPDE::makeTriangulation( parallel::distributed::Triangulation &tria) const { - parallel::distributed::Triangulation tria_box(MPI_COMM_WORLD), - tria_semicircle(MPI_COMM_WORLD); - if (dim == 3) - { - GridGenerator::subdivided_hyper_rectangle(tria_box, - userInputs.subdivisions, - Point(), - Point(userInputs.domain_size[0], - userInputs.domain_size[1], - userInputs.domain_size[2])); - } - else if (dim == 2) - { - GridGenerator::subdivided_hyper_rectangle(tria_box, - userInputs.subdivisions, - Point(), - Point(userInputs.domain_size[0], - userInputs.domain_size[1])); - } - else + parallel::distributed::Triangulation tria_box(MPI_COMM_WORLD); + parallel::distributed::Triangulation tria_semicircle(MPI_COMM_WORLD); + + // Check that dimensions match the benchmark + AssertThrow(dim == 2, ExcMessage("CHiMaD Benchmark 6b should only be run in 2D.")); + + // Create bounding points for each part of the triangulation + Point box_origin; + Point box_corner; + Point semicircle_origin; + + if (dim == 2) { - GridGenerator::subdivided_hyper_rectangle(tria_box, - userInputs.subdivisions, - Point(), - Point(userInputs.domain_size[0])); + box_corner = Point(userInputs.domain_size[0], userInputs.domain_size[1]); + semicircle_origin = + Point(userInputs.domain_size[0], userInputs.domain_size[1] / 2.0); } + GridGenerator::subdivided_hyper_rectangle(tria_box, + userInputs.subdivisions, + box_origin, + box_corner); + GridGenerator::half_hyper_ball(tria_semicircle, - Point(userInputs.domain_size[0], - userInputs.domain_size[1] / 2.0), + semicircle_origin, userInputs.domain_size[1] / 2.0); // Find the two non-corner vertices on the right side of the rectangular mesh - Point pt1, pt2; - typename parallel::distributed::Triangulation::active_cell_iterator - cell3 = tria_box.begin_active(), - endc3 = tria_box.end(); - for (; cell3 != endc3; ++cell3) + Point pt1; + Point pt2; + for (auto &cell : tria_box.active_cell_iterators()) { for (unsigned int i = 0; i < GeometryInfo::vertices_per_cell; ++i) { - Point &v = cell3->vertex(i); + Point &v = cell->vertex(i); if ((std::abs(v(0) - userInputs.domain_size[0]) < 1e-10) && (v(1) > userInputs.domain_size[1] / 2.0) && (v(1) < userInputs.domain_size[1] - 1.0e-10)) @@ -160,16 +156,14 @@ customPDE::makeTriangulation( } } } + // Move the vertices at the center of the half hyper ball so that they will // align with non-corner vertices on the right side of the rectangular mesh - typename parallel::distributed::Triangulation::active_cell_iterator - cell2 = tria_semicircle.begin_active(), - endc2 = tria_semicircle.end(); - for (; cell2 != endc2; ++cell2) + for (auto &cell : tria_semicircle.active_cell_iterators()) { for (unsigned int i = 0; i < GeometryInfo::vertices_per_cell; ++i) { - Point &v = cell2->vertex(i); + Point &v = cell->vertex(i); if ((std::abs(v(0) - userInputs.domain_size[0]) < 1e-10) && (v(1) > userInputs.domain_size[1] / 2.0) && (v(1) < userInputs.domain_size[1] - 1.0e-10)) @@ -183,69 +177,69 @@ customPDE::makeTriangulation( } } } + // Merge the rectangle and the semicircle GridGenerator::merge_triangulations(tria_box, tria_semicircle, tria); - // Attach a spherical manifold to the semicircular part of the domain so that - // it gets refined with rounded edges - static const SphericalManifold boundary( - Point(userInputs.domain_size[0], userInputs.domain_size[1] / 2.0)); - tria.set_manifold(8, boundary); + // Attach flat manifold to the entire domain + tria.reset_all_manifolds(); + tria.set_manifold(0, FlatManifold()); + tria.set_all_manifold_ids(0); + + // Attach spherical manifold + tria.set_manifold(8, SphericalManifold(semicircle_origin)); - typename parallel::distributed::Triangulation::active_cell_iterator - cell = tria.begin_active(), - endc = tria.end(); - for (; cell != endc; ++cell) + // Set the 3 outer cells of semicircle to the spherical manifold + for (const auto &cell : tria.active_cell_iterators()) { - for (unsigned int f = 0; f < GeometryInfo::faces_per_cell; ++f) + const Point cell_center = cell->center(); + const double distance_from_center = cell_center.distance(semicircle_origin); + + if (cell_center[0] > userInputs.domain_size[0] + 1.0e-10 && + distance_from_center > 0.1 * userInputs.domain_size[1]) { - const Point face_center = cell->face(f)->center(); - if (face_center[0] > userInputs.domain_size[0] + 1.0e-10) - { - cell->face(f)->set_all_manifold_ids(8); - if (face_center.distance(Point(userInputs.domain_size[0], - userInputs.domain_size[1] / 2.0)) > - 0.2 * userInputs.domain_size[1]) - { - cell->set_all_manifold_ids(8); - } - } + cell->set_all_manifold_ids(8); } } + // Transfinite interpolation + TransfiniteInterpolationManifold transfinite_manifold; + transfinite_manifold.initialize(tria); + tria.set_manifold(0, transfinite_manifold); + // Mark the boundaries - for (const auto &cell4 : tria.active_cell_iterators()) + for (const auto &cell : tria.active_cell_iterators()) { // Mark all of the faces for (unsigned int face_number = 0; face_number < GeometryInfo::faces_per_cell; ++face_number) { - if (cell4->face(face_number)->at_boundary()) + if (cell->face(face_number)->at_boundary()) { for (unsigned int i = 0; i < dim; i++) { if (i == 0) { - if (std::fabs(cell4->face(face_number)->center()(i) - (0)) < 1e-12) + if (std::fabs(cell->face(face_number)->center()(i) - (0)) < 1e-12) { - cell4->face(face_number)->set_boundary_id(2 * i); + cell->face(face_number)->set_boundary_id(2 * i); } - else if (std::fabs(cell4->face(face_number)->center()(i) > + else if (std::fabs(cell->face(face_number)->center()(i) > (userInputs.domain_size[i]))) { - cell4->face(face_number)->set_boundary_id(2 * i + 1); + cell->face(face_number)->set_boundary_id(2 * i + 1); } } else { - if (std::fabs(cell4->face(face_number)->center()(i) - (0)) < 1e-12) + if (std::fabs(cell->face(face_number)->center()(i) - (0)) < 1e-12) { - cell4->face(face_number)->set_boundary_id(2 * i); + cell->face(face_number)->set_boundary_id(2 * i); } - else if (std::fabs(cell4->face(face_number)->center()(i) - + else if (std::fabs(cell->face(face_number)->center()(i) - (userInputs.domain_size[i])) < 1e-12) { - cell4->face(face_number)->set_boundary_id(2 * i + 1); + cell->face(face_number)->set_boundary_id(2 * i + 1); } } } From a3d2d36d6f61461b3eb23b098cabbb62d1a6c188 Mon Sep 17 00:00:00 2001 From: landinjm Date: Mon, 14 Oct 2024 15:49:56 -0400 Subject: [PATCH 12/14] logically issue for list output types --- src/userInputParameters/setTimeStepList.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/userInputParameters/setTimeStepList.cc b/src/userInputParameters/setTimeStepList.cc index fc48cebb3..f38414cf8 100644 --- a/src/userInputParameters/setTimeStepList.cc +++ b/src/userInputParameters/setTimeStepList.cc @@ -9,7 +9,11 @@ userInputParameters::setTimeStepList( { std::vector timeStepList; - if (numberOfOutputs > 0) + if (outputSpacingType == "LIST") + { + timeStepList = userGivenTimeStepList; + } + else if (numberOfOutputs > 0) { if (outputSpacingType == "EQUAL_SPACING") { @@ -48,10 +52,6 @@ userInputParameters::setTimeStepList( } } } - else if (outputSpacingType == "LIST") - { - timeStepList = userGivenTimeStepList; - } else { // I'm not sure why this is set up this way. It seems like the intuitive From 743506527cec5aa3f95ee685c70aacd4b141fd5a Mon Sep 17 00:00:00 2001 From: landinjm Date: Mon, 14 Oct 2024 16:00:10 -0400 Subject: [PATCH 13/14] updating timestep with new mesh in 6b --- .../CHiMaD_benchmarks/CHiMaD_benchmark6b/parameters.prm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/parameters.prm b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/parameters.prm index d76bba216..7b5c6e4af 100644 --- a/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/parameters.prm +++ b/applications/CHiMaD_benchmarks/CHiMaD_benchmark6b/parameters.prm @@ -31,7 +31,7 @@ set Element degree = 2 # Set the time step parameters # ================================================================================= # The size of the time step -set Time step = 0.2e-4 +set Time step = 0.1e-4 # The simulation ends when either the number of time steps is reached or the # simulation time is reached. From 77e40f239678d72f39dd16ae3b0cb91fcf963a0d Mon Sep 17 00:00:00 2001 From: landinjm Date: Mon, 14 Oct 2024 16:31:00 -0400 Subject: [PATCH 14/14] updating debug script --- tests/automatic_tests/application_debug_test.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/automatic_tests/application_debug_test.py b/tests/automatic_tests/application_debug_test.py index 47daa0f35..37db86151 100644 --- a/tests/automatic_tests/application_debug_test.py +++ b/tests/automatic_tests/application_debug_test.py @@ -203,19 +203,12 @@ def run_tests_in_parallel(application_list): "corrosion", "CHAC_anisotropyRegularized", "corrosion_microgalvanic", - "CHAC_performance_test", "coupledCahnHilliardAllenCahn", - "CHiMaD_benchmark1a", "dendriticSolidification", - "CHiMaD_benchmark2a", "eshelbyInclusion", - "CHiMaD_benchmark3", "fickianDiffusion", - "CHiMaD_benchmark6a", "grainGrowth", - "CHiMaD_benchmark6b", "grainGrowth_dream3d", - "CHiMaD_benchmark7", "mechanics", "MgNd_precipitate_single_Bppp", "nucleationModel", @@ -228,8 +221,14 @@ def run_tests_in_parallel(application_list): "alloySolidification_uniform", "spinodalDecomposition", "anisotropyFacet", - "steadyStateAllenCahn", "cahnHilliard", + "CHiMaD_benchmarks/CHiMaD_benchmark1a", + "CHiMaD_benchmarks/CHiMaD_benchmark1b", + "CHiMaD_benchmarks/CHiMaD_benchmark1c", + "CHiMaD_benchmarks/CHiMaD_benchmark2a", + "CHiMaD_benchmarks/CHiMaD_benchmark3a", + "CHiMaD_benchmarks/CHiMaD_benchmark6a", + "CHiMaD_benchmarks/CHiMaD_benchmark7a", ] # Run tests in parallel